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

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


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了,这种比赛比的还是手速啊。。。


你可能感兴趣的:(CF CROC-MBTU 2012, Elimination Round (ACM-ICPC))