CF #137 DIV2
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.zzzyk.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。
补充:软件开发 , C++ ,