AtCoder Beginner Contest 366

A - Election 2

思路

票数超过半数即为获胜,也可以将剩余票数都给少数者,若结果相同,则结束;

AC代码

    #include<bits/stdc++.h>
    #define endl '\n'
    #define int int long long
    #define pb push_back
    #define bs bitset
    using namespace std;
    typedef pair<char,int> PCI;
    typedef pair<int,int> PII;
    typedef priority_queue<int> PQ;

    const int N = 2e5+10, MAX = 1e9, INF = -1e9;

    int n,a,b;


    signed main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin>>n>>a>>b;
        n-=(a+b);
        if((a>b&&a>b+n)||(b>a&&b>a+n))cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
        
        return 0;
    }

B - Vertical Writing

思路

以字符串的形式读入,并反转找到每一行输出的长度即可;

AC代码

    #include<bits/stdc++.h>
    #define endl '\n'
    #define int int long long
    #define pb push_back
    #define bs bitset
    using namespace std;
    typedef pair<char,int> PCI;
    typedef pair<int,int> PII;
    typedef priority_queue<int> PQ;

    const int N = 110, MAX = 1e9, INF = -1e9;

    int n;
    char s[N][N];
    char c[N][N];
    string S;
    int a[N];
    signed main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        memset(s,'*',sizeof(s));
        cin>>n;
        int lm=0;
        for(int i=n;i>=1;i--){
            cin>>S;
            int l=S.size();
            a[i]=l;
            S=" "+S;
            lm=max(lm,l);
            for(int j=1;j<=l;j++){
                s[i][j]=S[j];
            }
        }
        for(int i=1;i<=lm;i++){
            for(int j=1;j<=n;j++){
                c[i][j]=s[j][i];
            }
        }
        for(int i=1;i<=lm;i++){
            for(int j=n;j>=1;j--){
                if(c[i][j]!='*'){
                    a[i]=j;break;
                }
            }
        }
        for(int i=1;i<=lm;i++){
            for(int j=1;j<=a[i];j++){
                cout<<c[i][j];
            }
            cout<<endl;
        }
        return 0;
    }

C - Balls and Bag Query

思路

用map储存,若数量低于1则删除,答案就是map目前的大小;

AC代码

    #include<bits/stdc++.h>
    #define endl '\n'
    #define int int long long
    #define pb push_back
    #define bs bitset
    using namespace std;
    typedef pair<char,int> PCI;
    typedef pair<int,int> PII;
    typedef priority_queue<int> PQ;

    const int N = 2e5+10, MAX = 1e9, INF = -1e9;

    map<int,int> mp;
    int q;
    int x;
    int p;

    signed main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin>>q;
        while(q--){
            cin>>p;
            if(p==1){
                cin>>x;
                mp[x]++;
            }
            else if(p==2){
                cin>>x;
                mp[x]--;
                if(mp[x]<=0)mp.erase(x);
            }
            else cout<<mp.size()<<endl;
        }
        
        return 0;
    }

D - Cuboid Sum Query

思路

三维前缀和,不难,画图推理即可(考察美术);
核心算式:

三维前缀和的初始化:

\(s[i][1][1]=s[i-1][1][1]+a[i][1][1]\);

\(s[1][i][1]=s[1][i-1][1]+a[1][i][1]\);

\(s[1][1][i]=s[1][1][i-1]+a[1][1][i]\);

三维前缀和的计算:

\(s[i][j][k]=s[i-1][j][k]+s[i][j-1][k]+s[i][j][k-1]-s[i-1][j-1][k]-s[i][j-1][k-1]-s[i-1][j][k-1]+s[i-1][j-1][k-1]+a[i][j][k]\);

三维前缀和的使用(\(x1-x2\),\(y1-y2\),\(z1-z2\)):

\(s[x2][y2][z2]-s[x1-1][y2][z2]-s[x2][y1-1][z2]-s[x2][y2][z1-1]+s[x1-1][y2][z1-1]+s[x2][y1-1][z1-1]+s[x1-1][y1-1][z2]-s[x1-1][y1-1][z1-1]\)

AC代码

    #include<bits/stdc++.h>
    #define endl '\n'
    #define int int long long
    #define pb push_back
    #define bs bitset
    using namespace std;
    typedef pair<char,int> PCI;
    typedef pair<int,int> PII;
    typedef priority_queue<int> PQ;

    const int N = 105, MAX = 1e9, INF = -1e9;

    int n,q;
    int a[N][N][N];
    int s[N][N][N];
    int lx1,lx2,ly1,ly2,lz1,lz2;
    signed main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin>>n;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                for(int k=1;k<=n;k++){
                    cin>>a[i][j][k];
                }
            }
        }
        memset(s,0,sizeof(s));
        for(int i=1;i<=n;i++){
            s[i][1][1]=s[i-1][1][1]+a[i][1][1];
            s[1][i][1]=s[1][i-1][1]+a[1][i][1];
            s[1][1][i]=s[1][1][i-1]+a[1][1][i];
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                for(int k=1;k<=n;k++){
                    s[i][j][k]=s[i-1][j][k]+s[i][j-1][k]+s[i][j][k-1]-s[i-1][j-1][k]-s[i][j-1][k-1]-s[i-1][j][k-1]+s[i-1][j-1][k-1]+a[i][j][k];
                }
            }
        }
        cin>>q;
        while(q--){
            cin>>lx1>>lx2>>ly1>>ly2>>lz1>>lz2;
            cout<<s[lx2][ly2][lz2]-s[lx1-1][ly2][lz2]-s[lx2][ly1-1][lz2]-s[lx2][ly2][lz1-1]+s[lx1-1][ly2][lz1-1]+s[lx2][ly1-1][lz1-1]+s[lx1-1][ly1-1][lz2]-s[lx1-1][ly1-1][lz1-1]<<endl;
        }

        return 0;
    }

t.b.c.

posted @ 2024-10-01 18:06  Oaths  阅读(30)  评论(0)    收藏  举报