题目描述 定义一个有n个数字的一维数组,对其进行p次操作。每次操作输入两个数a,b,如果n[a]小于等于n[b],就将两个数的下标所对应的数调换,否则将n[b]加上1。p轮后,输出数组n。
输入格式 第一行输入n和p,第二行输入n个数,从第三行开始的p行输入a和b。
输出格式 输出n个数
输入输出样例 输入 #1复制 3 1 1 2 3 1 2 输出 #1复制 2 1 3 输入 #2复制 3 2 4 5 6 1 2 1 2 输出 #2复制 5 5 6 说明/提示 n,q,a,b<=100.n[i]<=10000
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int a[110];
int n,q,x,y;
scanf("%d %d",&n,&q);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
for(int i=1;i<=q;i++)
{
scanf("%d %d",&x,&y);
if(a[x]<=a[y]) swap(a[x],a[y]);
else a[y]++;
}
for(int i=1;i<=n;i++) printf("%d ",a[i]);
return 0;
}//用Ctrl+Shift+A改吧
然后是出数据模板
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ofstream infile,outfile;
int times=10;
void file(int tp){
char inname[10],outname[11];
infile.close();
outfile.close();
sprintf(inname,"data%02d.in",tp);
sprintf(outname,"data%02d.out",tp);
infile.open(inname);
outfile.open(outname);
}
#define num(a,b) ((rand()*RAND_MAX+rand())%(a-b+1)+a)
int make(int tp);
int main(){
srand(time(0));
for(int tp=1;tp<=times;++tp){
file(tp);
make(tp);
}
return 0;
}
make(int tp){
ll a[110];
int n=num(1,100),q=num(1,100),x,y;
infile<<n<<" "<<q<<endl;
for(int i=1;i<=n;i++)
{
a[i]=num(1,10000);
infile<<a[i]<<" ";
}
infile<<endl;
cout<<"Testpoint"<<tp<<":n="<<n<<",q="<<q<<endl;
for(int i=1;i<=q;i++)
{
x=num(1,100),y=num(1,100);
infile<<x<<" "<<y<<endl;
if(a[x]<=a[y]) swap(a[x],a[y]);
else a[y]++;
}
for(int i=1;i<=n;i++) outfile<<a[i]<<" ";
}//用Ctrl+Shift+A改吧
麻烦大佬告诉我为什么我无法通过