CF #137 DIV2

来源:岁月联盟 编辑:猪蛋儿 时间:2012-11-13

A题。
给你一个序列,给你两个操作。第一个操作是将第K个数加到序列最后,第二个操作是将第一个数删除。
问经过几次这个序列变成完全一样的序列,输出次数,否则输出-1.
大水题,先判断第K个数之后是否都相等,然后找出这个序列从哪一位开始是相等的,输出这一位-1就是操作的次数。
[cpp] 
while(scanf("%d%d",&n,&m)!=EOF) 
 
   for(int i=1; i<=n; i++) 
       scanf("%d",&a[i]); 
   bool flag=0; 
   for(int i=m; i<=n; i++) 
   { 
       if(a[i]!=a[n]) 
       { 
           flag=1; 
           break; 
       } 
 
   } 
   if(flag) 
       cout<<-1<<endl; 
   else 
       { 
           int i; 
           for(i=m;i>=1;i--) 
           { 
               if(a[i]!=a[m]) 
               { 
                   cout<<i<<endl; 
                   break; 
               } 
           } 
           if(i<1) 
           cout<<0<<endl; 
       } 
B,给你一个矩阵,里面有一些数字,现在进行一些行变化和列变化之后叫你输出x行y列的数字。
[cpp]
int hang[2000],lie[2000]; 
int Map[2000][2000]; 
int main() 

    int n,m,k; 
    while(scanf("%d%d%d",&n,&m,&k)!=EOF) 
    { 
        char a; 
        int x,y; 
        for(int i=1; i<=n; i++) 
        { 
            hang[i]=i; 
            for(int j=1; j<=m; j++) 
            { 
                lie[j]=j; 
                scanf("%d",&Map[i][j]); 
            } 
        } 
        while(k--) 
        { 
            cin>>a; 
            scanf("%d%d",&x,&y); 
            if(a=='g') 
            { 
                printf("%d/n",Map[hang[x]][lie[y]]); 
            } 
            else if(a=='r') 
            { 
                int temp=hang[x]; 
                hang[x]=hang[y]; 
                hang[y]=temp; 
            } 
            else 
            { 
                int temp=lie[x]; 
                lie[x]=lie[y]; 
                lie[y]=temp; 
            } 
        } 
    } 
 
 
    return 0; 

C。
D,给出n,m.
然后是n*2个数据,代表第一轮的成绩和第二轮的成绩。m是Vasya的最低成绩。
输出最好排名和最差排名。
显而易见,最好排名就是第一名。
最差排名就是贪心找最多的大于m的组数。
[cpp]
bool cmp(int a,int b) 

    return a>b; 

int a[100001],b[100001]; 
int main()  

    int n,m; 
    while(scanf("%d%d",&n,&m)!=EOF) 
    { www.2cto.com
        for(int i=0;i<n;i++) 
        { 
            scanf("%d",&a[i]); 
        } 
        for(int j=0;j<n;j++) 
        { 
            scanf("%d",&b[j]); 
        } 
        sort(a,a+n,cmp); 
        sort(b,b+n); 
        int ans=0; 
        for(int i=0;i<n;i++) 
        { 
            if(a[ans]+b[i]>=m) 
            ans++; 
        } 
        cout<<1<<" "<<ans<<endl; 
    } 

E。