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。