codeforces round#235 (div.2) A,B,C

来源:互联网 发布:mac os无guid分区表 编辑:程序博客网 时间:2024/06/07 06:33

这次的比赛感觉超级马虎,第三题本来是可以过去的,在前面特殊处理的时候竟然会出错,pretest还没有查出来。

第一题代码:

#include<iostream>using namespace std;int main(){//  freopen("data.txt","r",stdin);    ios::sync_with_stdio(false);    int n,x;    cin>>n>>x;    int sum=0;    for(int i=0;i<n;++i){        int a;        cin>>a;        sum+=a;    }    sum=sum>0?sum:-sum;    int tot=sum/x;    if(sum%x)tot++;    cout<<tot<<endl;    return 0;}

第二题给出Sereja参加每场比赛的信息,然后要求错过的比赛最多跟最少有多少场。最多场次就是所有没有参加的场次的总和,最少的场次就是把尽量多的场次并在一起。

代码如下:

#include<iostream>#include<cstring>using namespace std;int aa[4005];int main(){//  freopen("data.txt","r",stdin);    ios::sync_with_stdio(false);    memset(aa,0,sizeof(aa));    int x,k;    cin>>x>>k;    while(k--){        int a;        cin>>a;        if(a==1){            int b;            int c;            cin>>b>>c;            aa[b]=1;            aa[c]=1;        }        if(a==2){            int b;            cin>>b;            aa[b]=1;        }    }    int smax=0;    int smin=0;    aa[0]=1;    for(int i=1;i<x;++i){        if(aa[i]==0)smax++;        if(aa[i]==0&&aa[i-1]==0){smin++;aa[i]=1;aa[i-1]=1;continue;}        if(i<x-1)            {if(aa[i]==0&&aa[i+1]!=0){smin++;aa[i]=1;}}        else if(i==x-1){if(aa[i]==0)smin++;}    }    cout<<smin<<' '<<smax<<endl;    return 0;}

前几次提交的时候没有考虑对初始位置跟末位置的特殊处理。因为memset(aa,0,sizeof(aa))的时候,aa[0]与aa[n+1]都会变成0,这样会对结果造成影响,所以首末位置要特殊处理。

第三题因为马虎,导致pretest过了,后面的测试没过。在特殊处理m==n-1的时候多输出了一个。

代码如下:

#include<iostream>using namespace std;int main(){    ios::sync_with_stdio(false);    int m,n;    cin>>n>>m;    if(n>m+1||n<m/2-1+m%2){cout<<-1<<endl;return 0;}    if(m==n-1){        for(int i=1;i<n;++i){            cout<<"01";        }        cout<<0<<endl;    }    else if(m==n){        for(int i=0;i<n;++i){            cout<<"01";        }        cout<<endl;    }    else if(m==n+1){        for(int i=0;i<n;++i){            cout<<"10";        }        cout<<1<<endl;    }    else{        int cm=m;        int cn=n;        for(int i=0;i<m-n-1;++i){            if(cn&&cm)                {cout<<"110";                cm-=2;                cn--;}            else if(cm){cout<<11;cm-=2;}        }        for(int i=m-n;i<=n;++i){            if(cm&&cn)            {cout<<"10";            cm--;            cn--;}            else if(cm){                cout<<1;                cm--;            }            else if(cn){                cout<<0;                cn--;            }            else break;        }        if(cm)            cout<<1;        if(cn)cout<<0;        cout<<endl;    }    return 0;}


0 0
原创粉丝点击