CF CROC-MBTU 2012, Elimination Round (ACM-ICPC)

来源:互联网 发布:网络电视盒价格 编辑:程序博客网 时间:2024/06/07 18:02

还是要靠手速啊,手快有手慢无。。。


A题,读题意即可

int main(){    int a=0,b=0;    int T;    cin>>T;    int numa=0,numb=0;    while(T--)    {        int x;        cin>>x;        int a1,b1;        if(x==1)        {            cin>>a1>>b1;            a+=a1;            a+=b1;            numa+=a1;        }        else        {            cin>>a1>>b1;            b+=a1;            b+=b1;            numb+=a1;        }    }if(numa>=a/2)        cout<<"LIVE"<<endl;        else        cout<<"DEAD"<<endl;        if(numb>=b/2)        cout<<"LIVE"<<endl;        else        cout<<"DEAD"<<endl;    return 0;}

B题,模拟一下即可,主要是注意 http或者ftp后面直接接ru的情况。例如httpru,ftpruru

int main(){    string s;    s.clear();    char a[100];    scanf("%s",a);    char b[100];    int l1=strlen(a);    for(int i=0; i<strlen(a); i++) //逆串        b[i]=a[l1-1-i];    b[l1]='\0';    s.assign(a);    string ss;    int l=s.length();    ss.assign(b);    int pos=ss.find("ur");//找到最后一个ru,因为是逆串,所以找"ur"    pos=l-pos-2;    if(s[0]=='h')    {        cout<<"http://";        if(pos==-1||pos==4)        {            for(int i=4; i<l; i++)                cout<<s[i];            cout<<endl;            return 0;        }        for(int i=4; i<=pos-1; i++)            cout<<s[i];        cout<<".ru";        if(pos+1!=l-1)            cout<<"/";        for(int i=pos+2; i<l; i++)            cout<<s[i];    }    else    {        cout<<"ftp://";        if(pos==-1||pos==3)        {            for(int i=3; i<l; i++)                cout<<s[i];            cout<<endl;            return 0;        }        for(int i=3; i<=pos-1; i++)            cout<<s[i];        cout<<".ru";        if(pos+1!=l-1)            cout<<"/";        for(int i=pos+2; i<l; i++)            cout<<s[i];    }    cout<<endl;    return 0;}
C题,贪心即可。从N-1遍历,在i这位将i*2和i*2+1这两位都置0,得到步数。

最后加上a[1]置0需要的步数。

void solveC(){    int n;    int a[105];    cin>>n;    for(int i=1; i<=n; i++)        scanf("%d",&a[i]);    if(n<=2||n&1==0)        cout<<-1<<endl;    else    {        int num=0;        for(int i=n; i>=1; i--)        {            if(2*i+1<=n)            {                int x=max(a[2*i],a[2*i+1]);                num+=x;                a[2*i]=0;                a[2*i+1]=0;                a[i]-=x;                if(a[i]<0)                    a[i]=0;            }        }        num+=a[1];        a[1]=0;        for(int i=1; i<=n; i++)            if(a[i]!=0)                num=-1;        cout<<num<<endl;    }}
D题,给你一个n*n的矩阵,用bij表示,每个 bij表示ai&aj。

用位运算|逆向构造ai即可。

void solveD(){    int n;    int a[105];    int b[105][105];    cin>>n;    for(int i=0; i<n; i++)        for(int j=0; j<n; j++)            cin>>b[i][j];    for(int i=0; i<n; i++)    {        a[i]=0;        for(int j=0; j<n; j++)        {            if(i==j)                continue;            a[i]|=b[i][j];        }    }    for(int i=0; i<n; i++)        cout<<a[i]<<" ";    cout<<endl;}

E题,水模拟,只需模拟一下人进来和出去即可,找到最大可能同时出现的人数。

void solveE(){    char s[1000];    scanf("%s",s);    int l=strlen(s);    int numin=0;    int num=0;    for(int i=0; i<l; i++)    {        if(s[i]=='+')        {            if(num>numin)            {                numin++;            }            else            {                num++;                numin++;            }        }        else        {            if(numin)            {                numin--;            }            else                num++;        }    }    cout<<num<<endl;}

F。

G。

H 。

待续。

过几天把剩下的A了,这种比赛比的还是手速啊。。。


原创粉丝点击