求大佬!我按题意模拟为何错了

P2035 [USACO08JAN] iCow B

#1 WA 0ms/11886kB #2 WA 36ms/11886kB #3 AC 0ms/11886kB #4 WA 0ms/11886kB #5 WA 0ms/11886kB #6 WA 0ms/11886kB #7 WA 0ms/11886kB #8 WA 19ms/11886kB #9 WA 0ms/11886kB #10 WA 2ms/11886kB 我也是
by wanghongyu @ 2017-06-09 19:01:48


代码 ```cpp #include<iostream> using namespace std; int n,t,i,j,ma,a[1005]; int main() { cin>>n>>t; for(i=1;i<=n;i++)cin>>a[i]; for(i=1;i<=t;i++) { ma=1; for(j=2;j<=n;j++)if (a[j]>a[ma]) ma=j; cout<<ma<<"\n"; for(j=1;j<=n;j++)if (j!=ma) a[j]=a[j]+a[ma]/(n-1); a[ma]=a[ma]%(n-1); j=0; while(a[ma]--) { j++; if (j=ma) j++; a[j]++; } a[ma]=0; } return 0; } ```
by wanghongyu @ 2017-06-09 19:06:13


改了一下,20分…… ```cpp #include <bits/stdc++.h> using namespace std; int n,t; struct N{ int id,s; }a[1005]; inline bool cmp(N p,N q){ if (p.s!=q.s)return p.s>q.s; else return p.id<q.id; } inline bool cmp1(N p,N q){return p.id<q.id;} int main(void){ scanf ("%d%d",&n,&t); for (int i=0;i<n;i++){ scanf ("%d",&a[i].s);a[i].id=i;} while (t--){ sort (a,a+n,cmp); printf ("%d\n",a[0].id+1); for (int i=1;i<n;i++) a[i].s+=a[0].s/(n-1); a[0].s%=(n-1); int k=a[0].s; a[0].s=0; if (k){ sort(a,a+n,cmp1); for (int i=0;i<k;i++)a[i].s++; } } } ```
by 引领天下 @ 2017-06-25 08:16:05


这题怎么难吗?
by sjl40 @ 2017-10-28 22:38:19


dalao都错了。
by sjl40 @ 2017-10-28 22:39:15


我觉得不能用结构体,不能改变他们原来的位置。 奉上AC代码。 /\* ```cpp #include<iostream> #include<cstdio> #include<algorithm> using namespace std; int b[1005],a[1005]; int n,m,j,i,ma,mai; int main() { cin>>n>>m; for(i=1;i<=n;i++){cin>>a[i];b[i]=i;} for(i=1;i<=m;i++) { for(j=1;j<=n;j++)if(a[j]>ma){ma=a[j];mai=j;} cout<<b[mai]<<endl; for(j=1;j<=n;j++)if(j!=mai)a[j]+=a[mai]/(n-1); a[mai]%=(n-1); while(a[mai]!=0) for(j=1;j<=n;j++){if(j!=mai){a[j]++;a[mai]--;}if(a[mai]==0)break;} ma=mai=0; } } */ ```
by sjl40 @ 2017-10-28 23:04:36


其实能用结构体(+排序),但是有点低效 一名蒟蒻的代码 ```cpp #include<cstdio> #include<iostream> #include<algorithm> using namespace std; int n,k,t,m,x,i,j; struct node { int v,b; }a[1010]; bool cmp1(node x,node y) { if(x.v>y.v) return 1; if(x.v==y.v && x.b<y.b) return 1; return 0; } bool cmp(node x,node y) { return x.b<y.b; } int main() { scanf("%d%d",&n,&t); if(n==1) { scanf("%d",&x); for(i=1;i<=t;i++) printf("%d\n",x); return 0; } for(i=1;i<=n;i++) { scanf("%d",&a[i].v); a[i].b=i; } for(i=1;i<=t;i++) { sort(a+1,a+n+1,cmp1); printf("%d\n",a[1].b); k=a[1].v/(n-1); m=a[1].v%(n-1); for(j=2;j<=n;j++) a[j].v+=k; sort(a+2,a+n+1,cmp); for(j=2;j<=m+1;j++) a[j].v++; a[1].v=0; } } ```
by yali_hzy @ 2017-10-31 18:00:45


20 ``` #include <bits/stdc++.h> using namespace std; #define N 1100 int r[N],n,t; namespace doit { inline int read() { int x=0,p=1; char c; c=getchar(); while(c<'0'||c>'9') { if(c=='-') p=-1; c=getchar(); } while(c>='0'&&c<='9') { x=x*10+c-'0'; c=getchar(); } return x*p; } inline void input() { n=read();t=read(); for(register int i=1;i<=n;i++) r[i]=read();; } inline int solve() { int maxx=0,mid; for(register int i=1;i<=n;i++) if(r[i]>maxx) { mid=i; maxx=r[i]; } int k=maxx/(n-1),m=maxx%(n-1); if(m==0) { for(register int i=1;i<=n;i++) { if(i!=mid) r[i]+=k; else r[i]=0; } } else { for(register int i=1;i<=n;i++) { if(i!=mid) r[i]+=k; else r[i]=0; } for(register int i=1;i<=m;i++) if(i!=mid) r[i]++; } return mid; } inline void output() { int out=0; std::cout<<"\n"; for(register int i=1;i<=t;i++) { out=solve(); std::cout<<out<<"\n"; } } } int main() { ios::sync_with_stdio(false); doit::input(); doit::output(); } ```
by TRZ_2007 @ 2019-02-11 13:59:30


|