2021.01.30 Rating赛 | Codeforces Round #491 (Div. 2) ABCD

 

CodeForces - 991A

这个题画个文氏图就差不多了。

需要注意的地方就是数据可能会有逻辑错误。

1、这里可能会忘记除了自己其他人都可能是通过了的。

2、还有一个就是C必须小于A、B里最小的一个数才行。

 

#include <iostream>
#include <algorithm>
#include <cstring>
#include <map>
#include <string>
#define MAXN 100007
typedef long long ll;

using namespace std;
int t, n;
int main(){
    int a,b,c,d;
    cin>>a>>b>>c>>d;
    if(d-(a-c)-(b-c)-c >=1 && c<=a&&c<=b)
        cout<<d-(a-c)-(b-c)-c<<endl;
    else
        cout<<"-1"<<endl;


    return 0;
}

 

CodeForces - 991B

贪心问题。

对数据升序排列,然后将一个个最小的变成5进行判断。

该题数据量如果很大的话,可以使用二分进行优化。

但是鉴于这里数据只有100,直接暴力枚举就可以了。

 

#include <iostream>
#include <algorithm>
#include <cstring>
#include <map>
#include <string>
#define MAXN 100007
typedef long long ll;

using namespace std;
int t, n;
double a[107],ss=0;
int main(){
    cin>>n;
    for(int i =0;i<n;i++){
        cin>>a[i];
        ss+=a[i];
    }
    if(ss/(1.0*n)>=4.5){
        cout<<"0"<<endl; 
    }    
    else{
        sort(a,a+n);
        for(int i =0;i<n;i++){
            ss-=a[i];
            ss+=5.0;
            if(ss/(1.0*n)>=4.5){
                cout<<i+1<<endl; 
                break;
            }    
        }
    }


    return 0;
}

 

CodeForces - 994C

模拟 + 二分

比赛的期间忘记了二分的方法,根本没有想起来。

#include <iostream>
#include <algorithm>
#include <cstring>
#include <map>
#include <string>
#include <cstdio>
#define MAXN 100007
typedef long long ll;

using namespace std;
ll n,l,r,i,m,ss,j,ans; 
int main(){
    scanf("%lld",&n);
    l=1,r=n;
    while(l<r){
        i=(l+r)/2;
        m=n;
        ss=0;
        while(m>0){
            if(m>=i){
                m-=i;
                ss+=i;    
            }
            else{
                ss+=m;
                m=0;
            }
            m-=(m/10);
        }
if(ss>=(n+1)/2){ ans=r=i; } else{ l=i+1; } } if(ans<1) ans=1; cout<<ans<<endl; return 0; }

 

CodeForces - 991D

直接遍历标记判断

#include <iostream>
#include <algorithm>
#include <cstring>
#include <map>
#include <string>
#define MAXN 100007
typedef long long ll;

using namespace std;
int t, n;
struct book{
    int u,d;
}g[MAXN];
char s1[MAXN],s2[MAXN];
int ans=0;
map<int,int> m1,m2;
int main(){
    scanf("%s\n%s",s1,s2);
    for(int i =0;i<=strlen(s1);i++){
        if(s1[i]=='0'&&s2[i]=='0'&&s2[i+1]=='0'&&!m1[i]&&!m2[i]&&!m2[i+1]){
            m1[i]=1;
            m2[i]=1;
            m2[i+1]=1;
            ans++;
        }
        if(s2[i]=='0'&&s1[i]=='0'&&s1[i+1]=='0'&&!m2[i]&&!m1[i]&&!m1[i+1]){
            m2[i]=1;
            m1[i]=1;
            m1[i+1]=1;
            ans++;
        }
        if(s1[i+1]=='0'&&s2[i]=='0'&&s2[i+1]=='0'&&!m1[i+1]&&!m2[i]&&!m2[i+1]){
            m1[i+1]=1;
            m2[i]=1;
            m2[i+1]=1;
            ans++;
        }
        if(s2[i+1]=='0'&&s1[i]=='0'&&s1[i+1]=='0'&&!m2[i+1]&&!m1[i]&&!m1[i+1]){
            m2[i+1]=1;
            m1[i]=1;
            m1[i+1]=1;
            ans++;
        }
    }
    cout<<ans<<endl;

    return 0;
}

 

上一篇:2021-02-11


下一篇:lzty 学习java的第一天,想一起研究学习的可以留个联系方式