比赛链接https://vjudge.net/contest/256988#status/17111202012/C/0/
大意:三个操作,使得输入的数中,从1-n,每一个数出现的次数相同。
wa代码(只是考虑了三个数的情况):
#include #include #include #include #include #include #include #include using namespace std; # define maxn 1000+10 # define inf 0x3f3f3f3f int vis[maxn]; int main() { int n,m; memset(vis,0,sizeof(vis)); scanf("%d%d",&n,&m); for(int i=1; i<=m; i++) { int temp; scanf("%d",&temp); vis[temp]++; } if((m+1)%n==0) { int t=(m+1)/n; int num1=0,num2=0; int s=0; for(int i=1; i<=n; i++) { if(vis[i]!=t) { num1++; num2=vis[i]; s=i; } } if(num1==1&&num2==t-1) { printf("+%d\n",s); return 0; } } if((m-1)%n==0) { int t=(m-1)/n; int num1=0,num2=0; int s=0; for(int i=1; i<=n; i++) { if(vis[i]!=t) { num1++; num2=vis[i]; s=i; } } if(num1==1&&num2==t+1) { printf("-%d\n",s); return 0; } } if(m%n==0) { int temp=m/n; int s1=inf,s2=-inf,w1,w2; for(int i=1; i<=n; i++) { if(vis[i]s2) { s2=vis[i]; w2=i; }//出现的最多次数 } if(s1==s2-2&&s1+1==temp) { printf("-%d+%d\n",w2,w1); return 0; } } printf("*\n"); return 0; }
AC代码(新思路,按照平均数来找):
#include #include #include #include #include #include #include #include using namespace std; # define maxn 1000+10 # define inf 0x3f3f3f3f int vis[maxn]; int main() { int n,m; memset(vis,0,sizeof(vis)); scanf("%d%d",&n,&m); for(int i=1; i<=m; i++) { int temp; scanf("%d",&temp); vis[temp]++; } if((m+1)%n==0) { int t=(m+1)/n; int num1=0,num2=0; int s=0; for(int i=1; i<=n; i++) { if(vis[i]!=t) { num1++; num2=vis[i]; s=i; } } if(num1==1&&num2==t-1) { printf("+%d\n",s); return 0; } } if((m-1)%n==0) { int t=(m-1)/n; int num1=0,num2=0; int s=0; for(int i=1; i<=n; i++) { if(vis[i]!=t) { num1++; num2=vis[i]; s=i; } } if(num1==1&&num2==t+1) { printf("-%d\n",s); return 0; } } if(m%n==0) { int temp=m/n; int s1=inf,s2=-inf,w1,w2; for(int i=1; i<=n; i++) { if(vis[i]s2) { s2=vis[i]; w2=i; }//出现的最多次数 } if(s1==s2-2&&s1+1==temp) { printf("-%d +%d\n",w2,w1); return 0; } } printf("*\n"); return 0; }
转载于:https://www.cnblogs.com/letlifestop/p/10262876.html