• Codeforces Round #643 (Div. 2)


    A

    等到 (0) 出现后就退出

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    const int N = 1000005;
    
    int solve(int x) {
        int mn=9,mx=0;
        while(x>0) {
            int p=x%10;
            mn=min(mn,p);
            mx=max(mx,p);
            x/=10;
        }
        return mn*mx;
    }
    
    signed main() {
        int t;
        cin>>t;
        while(t--) {
            int x,k;
            cin>>x>>k;
            --k;
            while(solve(x) && k) x+=solve(x), --k;
            cout<<x<<endl;
        }
    }
    
    

    B

    排序后贪心分组即可

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    const int N = 1000005;
    
    int t,n,a[N];
    
    signed main() {
        ios::sync_with_stdio(false);
        cin>>t;
        while(t--) {
            cin>>n;
            for(int i=1;i<=n;i++) cin>>a[i];
            sort(a+1,a+n+1);
            int ans=0,cnt=0;
            for(int i=1;i<=n;i++) {
                ++cnt;
                if(a[i]<=cnt) {
                    cnt=0;
                    ++ans;
                }
            }
            cout<<ans<<endl;
        }
    }
    
    

    C

    (f[i]) 表示满足条件的 (x+y=i)((x,y)) 数,然后利用 (f[]) 的后缀和算答案即可

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    const int N = 1200005;
    
    int a,b,c,d,e,f,ans,F[N];
    
    signed main() {
        cin>>a>>b>>e>>f;
        c=b;d=e;
        for(int i=1;i<=1e6+8;i++) {
            int x1=i>a+d?i-d:a;
            int x2=i>b+c?b:i-c;
            F[i]=max(0ll,x2-x1+1);
        }
        for(int i=1e6+5;i>=1;--i) F[i]+=F[i+1];
        for(int i=e;i<=f;i++) ans+=F[i+1];
        cout<<ans<<endl;
    }
    
    

    D

    每个位置分 (2),最后一个把余下的全部拿走,不够分则挂。令 (k=1)

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    const int N = 1000005;
    
    int n,s,a[N];
    
    signed main() {
        ios::sync_with_stdio(false);
        cin>>n>>s;
        if(s<2*n) {
            cout<<"no";
        }
        else {
            cout<<"yes"<<endl;
            for(int i=1;i<n;i++) a[i]=2, s-=2;
            a[n]=s;
            for(int i=1;i<=n;i++) cout<<a[i]<<" ";
            cout<<endl;
            cout<<1<<endl;
        }
    }
    

    E

    三分,检验答案时贪心,设 (M=min(M,A+R)),然后能移动就移动即可

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    const int N = 1000005;
    
    int n,A,R,M,a[N];
    
    int check(int x) {
        int ans=0;
        int u=0,b=0;
        for(int i=1;i<=n;i++) {
            if(a[i]>x) u+=a[i]-x;
            if(a[i]<x) b+=x-a[i];
        }
        int d=abs(u-b),m=min(u,b);
        if(u>b) ans+=d*R;
        if(b>u) ans+=d*A;
        ans+=m*M;
        return ans;
    }
    
    signed main() {
        ios::sync_with_stdio(false);
        cin>>n>>A>>R>>M;
        if(A+R<M) M=A+R;
        for(int i=1;i<=n;i++) cin>>a[i];
    
        int l=0,r=1e9;
        while(l<r) {
            int m1=(2*l+r)/3,m2=(2*r+l+2)/3;
            if(check(m1)<check(m2)) r=m2-1;
            else l=m1+1;
        }
        cout<<check(l)<<endl;
    }
    

    F

    FST了,wa on test 38,就不贴了,待补

    总结

    F 题 FST 是意料之中的吧,前期题过得太慢了,被A题卡了一刻钟非常不应该

  • 相关阅读:
    洛谷-P5709 【深基2.习6】Apples Prologue
    右键添加功能
    配置Java环境变量遇到的坑
    mysql安装
    页面置换算法
    程序员画图软件
    Java中传值和传引用
    计算机网络之链路层
    Python开发【第十五篇】模块的导入
    Python开发【第十四篇】装饰器
  • 原文地址:https://www.cnblogs.com/mollnn/p/12902680.html
Copyright © 2020-2023  润新知