zoukankan      html  css  js  c++  java
  • 《 Codeforces Round #673 (Div. 2)》

    A:签到:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    typedef pair<LL,int> pii;
    const int N = 1005;
    const int M = 1e6+5;
    const LL Mod = 1e9+7;
    #define rg register
    #define pi acos(-1)
    #define INF 1e9
    #define CT0 cin.tie(0),cout.tie(0)
    #define IO ios::sync_with_stdio(false)
    #define dbg(ax) cout << "now this num is " << ax << endl;
    namespace FASTIO{
        inline LL read(){
            LL x = 0,f = 1;char c = getchar();
            while(c < '0' || c > '9'){if(c == '-') f = -1;c = getchar();}
            while(c >= '0' && c <= '9'){x = (x<<1)+(x<<3)+(c^48);c = getchar();}
            return x*f;
        }
        void print(int x){
            if(x < 0){x = -x;putchar('-');}
            if(x > 9) print(x/10);
            putchar(x%10+'0');
        }
    }
    using namespace FASTIO;
    
    int a[N];
    int main()
    {
        int ca;ca = read();
        while(ca--)
        {
            int n,k;n = read(),k = read();
            priority_queue<int,vector<int>,greater<int> > Q;
            while(n--)
            {
                int x;x = read();
                Q.push(x);
            }
            int num = 0;
            while(Q.size() > 1)
            {
                int ma1 = Q.top();Q.pop();
                int ma2 = Q.top();Q.pop();
                if(ma1+ma2 > k) break;
                num++;
                Q.push(ma1);
                Q.push(ma1+ma2);
            }
            printf("%d
    ",num);
        }
        //system("pause");
        return 0;
    }
    View Code

    B:签到:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    typedef pair<int,int> pii;
    const int N = 1e5+5;
    const int M = 2e5+5;
    const LL Mod = 1e9+7;
    #define rg register
    #define pi acos(-1)
    #define INF 1e9
    #define CT0 cin.tie(0),cout.tie(0)
    #define IO ios::sync_with_stdio(false)
    #define dbg(ax) cout << "now this num is " << ax << endl;
    namespace FASTIO{
        inline LL read(){
            LL x = 0,f = 1;char c = getchar();
            while(c < '0' || c > '9'){if(c == '-') f = -1;c = getchar();}
            while(c >= '0' && c <= '9'){x = (x<<1)+(x<<3)+(c^48);c = getchar();}
            return x*f;
        }
        void print(int x){
            if(x < 0){x = -x;putchar('-');}
            if(x > 9) print(x/10);
            putchar(x%10+'0');
        }
    }
    using namespace FASTIO;
    
    int a[N];
    int main()
    {
        int ca;ca = read();
        while(ca--)
        {
            int n,T;n = read(),T = read();
            for(rg int i = 1;i <= n;++i) a[i] = read();
            if(T&1)
            {
                for(rg int i = 1;i <= n;++i) a[i] = (a[i] <= T/2) ? 0 : 1;
            }
            else
            {
                int f = 0;
                for(rg int i = 1;i <= n;++i)
                {
                    if(a[i] == T/2) a[i] = f,f = (f+1) % 2;
                    else a[i] = (a[i] < T/2) ? 0 : 1;
                }
            }
            for(rg int i = 1;i <= n;++i) printf("%d%c",a[i],i == n ? '
    ' : ' ');
        }
       // system("pause");
    }
    View Code

    C:处理出每个数组覆盖完的最大距离,然后取最小。

    有点抽象,见代码。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    typedef pair<double,int> pii;
    const int N = 3e5+5;
    const int M = 2e5+5;
    const LL Mod = 1e9+7;
    #define rg register
    #define pi acos(-1)
    #define INF 1e9
    #define CT0 cin.tie(0),cout.tie(0)
    #define IO ios::sync_with_stdio(false)
    #define dbg(ax) cout << "now this num is " << ax << endl;
    namespace FASTIO{
        inline LL read(){
            LL x = 0,f = 1;char c = getchar();
            while(c < '0' || c > '9'){if(c == '-') f = -1;c = getchar();}
            while(c >= '0' && c <= '9'){x = (x<<1)+(x<<3)+(c^48);c = getchar();}
            return x*f;
        }
        void print(int x){
            if(x < 0){x = -x;putchar('-');}
            if(x > 9) print(x/10);
            putchar(x%10+'0');
        }
    }
    using namespace FASTIO;
    
    int a[N],ans[N];
    vector<int> vec[N];
    int main()
    {
        int ca;ca = read();
        while(ca--)
        {
            int n;n = read();
            for(rg int i = 1;i <= n;++i) vec[i].clear();
            for(rg int i = 1;i <= n;++i)
            {
                int x;x = read();
                vec[x].push_back(i);
                ans[i] = INF;
            }
            for(rg int i = 1;i <= n;++i)
            {
                if(!vec[i].empty())
                {
                    int mx = vec[i][0],len = vec[i].size();
                    for(rg int j = 1;j < len;++j)
                    {
                        mx = max(mx,vec[i][j]-vec[i][j-1]);
                    }
                    mx = max(mx,n-vec[i][len-1]+1);
                    ans[mx] = min(ans[mx],i);
                }
            }
            for(rg int k = 2;k <= n;++k) ans[k] = min(ans[k],ans[k-1]);
            for(rg int k = 1;k <= n;++k) printf("%d%c",ans[k] == INF ? -1 : ans[k],k == n ? '
    ' : ' ');
        }
    }
    View Code

    D:感觉这题也不是很难想到。

    一开始没注意题,以为过程中出现负数也可以。

    那么就可以一直用第一个来操作。

    对于然后使别的数分为 > 平均数和  < 平均数来操作。

    后面,发现中间不能出现负数。。

    那么,我们就先把所有的值都加给1,然后最后全部给每个位即可。

    这里如果这个位子满足a[i] % i == 0,那么显然可以直接给1号位。

    如果不满足,那么就先用1号位来凑成满足的,然后再给一号位。

    因为我们是边给边凑的,且a[i] >= 1,那么这个凑得值肯定 < i,对于前面的i个位置相加后的值显然>= i-1,那么中途肯定不会有负数出现。

    所以是可行的。(笨比的我还用exgcd求加的值

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    typedef pair<double,int> pii;
    const int N = 1e4+5;
    const int M = 1e5+5;
    const LL Mod = 1e9+7;
    #define rg register
    #define pi acos(-1)
    #define INF 1e9
    #define CT0 cin.tie(0),cout.tie(0)
    #define IO ios::sync_with_stdio(false)
    #define dbg(ax) cout << "now this num is " << ax << endl;
    namespace FASTIO{
        inline LL read(){
            LL x = 0,f = 1;char c = getchar();
            while(c < '0' || c > '9'){if(c == '-') f = -1;c = getchar();}
            while(c >= '0' && c <= '9'){x = (x<<1)+(x<<3)+(c^48);c = getchar();}
            return x*f;
        }
        void print(int x){
            if(x < 0){x = -x;putchar('-');}
            if(x > 9) print(x/10);
            putchar(x%10+'0');
        }
    }
    using namespace FASTIO;
    
    int a[N];
    struct Node{int i,j,x;};
    vector<Node> vec;
    int main()
    {
        int ca;ca = read();
        while(ca--)
        {
            int n;n = read();
            vec.clear();
            int sum = 0;
            for(rg int i = 1;i <= n;++i) a[i] = read(),sum += a[i];
            if(sum % n != 0){printf("-1
    ");continue;}
            int ma = sum / n;
            for(rg int i = 2;i <= n;++i)
            {
                if(a[i] % i == 0) vec.push_back(Node{i,1,a[i]/i});
                else
                {
                    int ma = (i - a[i] % i);
                    vec.push_back(Node{1,i,ma});
                    vec.push_back(Node{i,1,(a[i]+ma) / i});
                }
            }
            for(rg int i = 2;i <= n;++i) vec.push_back(Node{1,i,ma});
            printf("%d
    ",vec.size());
            for(rg int i = 0;i < vec.size();++i) printf("%d %d %d
    ",vec[i].i,vec[i].j,vec[i].x);
        }
    }
    View Code
  • 相关阅读:
    Antd表格跨行
    Echarts使用记录
    PAT甲级刷题实录——1010
    PAT甲级刷题实录——1009(写文章时又想到了改进方法)
    PAT甲级刷题实录——1008
    PAT甲级刷题实录——1007
    PAT甲级刷题实录——1006
    PAT甲级刷题实录——1005
    PAT甲级刷题实录——1004
    PAT甲级刷题实录——1003
  • 原文地址:https://www.cnblogs.com/zwjzwj/p/13750234.html
Copyright © 2011-2022 走看看