竞赛
考级
#include<bits/stdc++.h> using namespace std; int n,w[11000],m,ans,maxx; int main(){ scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&w[i]); int t=m+1; while(t<=n+1){ for(int i=1;i<=m;i++){ w[i]--; if(w[i]==0){ w[i]=w[t]; t++; } } ans++; } for(int i=1;i<=m;i++) maxx=max(maxx,w[i]); }
法兰西玫瑰
19.[NOIP2010 普及组] 接水问题 难度:普及/提高- 来源:NOIP普及组 ![] AC代码(C++/C#): 没有注释,自行学习。 by:ጿ ኈ ቼ ዽ ጿ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 你的点赞和关注就是我更新题解的最大动力! ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -----------------------------点个赞吧 ↓ !-----------------------------
ጿ ኈ ቼ ዽ ጿ
根据题意 我们要求所有同学都接完水需要多少秒。 那么我们就模拟他们接水的过程 我们可以用一个循环模拟m个水龙头一秒的接水量 (循环一次就是一秒) 当然要到数组 数组下标就是每个水龙头的标号 (1-m) 那么数组的值就是对应的学生对应的接水量 刚开始时1-m个水龙头默认的对应1-m编号学生的接水量 一旦有一个学生接完了 那么就让下一个等待接水的学生来这个水龙头接水 用代码实现的话就是让下个学生对应的接水值赋值这个这个水龙头对应的数组 2.当然上面的代码是套在一个while里的 那么循环的终止条件是什么呢 首先我像大家解释t的初始值为m+1 因为一开始m个学生在接 下一个学生就是m+1 那么循环的终止条件就是(t<=m+n) 因为n个学生都接完水会让t最终加n个1 但t的初始值又是m+1 所以当t=m+n+1时意味着所有学生都接完水了
AC君
#include<cstdio> using namespace std;int n,m,a[10001],b[101],x;int ma(int a[],int l);int mi(int a[],int l); int main() {scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)scanf("%d",&a[i]); for(int i=1;i<=n;i++)x=mi(b,m),b[x]+=a[i]; printf("%d",ma(b,m));} int mi(int a[],int l) {int m=10000,mid; for(int i=1;i<=l;i++)if(a[i]<m)m=a[i],mid=i; return mid;} int ma(int a[],int l) {int m=0; for(int i=1;i<=l;i++)if(a[i]>m)m=a[i]; return m;}
史莱克七怪
模拟不就好了
亚洲卷王 AK IOI
CuSO4
#include<bits/stdc++.h> using namespace std; int n,w[11000],m,ans,maxx; int main(){ scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&w[i]); int t=m+1; while(t<=n+1){ for(int i=1;i<=m;i++){ w[i]--; if(w[i]==0){ w[i]=w[t]; t++; } } ans++; } for(int i=1;i<=m;i++) maxx=max(maxx,w[i]); cout<<ans+maxx<<endl; }
༺ཌༀ☢.泪ༀད༻
既然输入数据有多个,那就先安排数组: 然后按输入顺序一个个按照循环次数减一,直到减成0换到下一位: 完整代码:
ddxdd
#include<iostream> #include<queue> #include<algorithm> using namespace std; int a[10005]; int main(){ int n,m; cin>>n>>m; int maxn=0; for(int i=1;i<=n;i++){ cin>>a[i]; maxn=max(maxn,a[i]); } if(n<=m){ cout<<maxn; return 0; } int ans=0; int idx=m+1; while(idx<n+1){ for(int i=1;i<=m;i++){ a[i]--; if(a[i]==0){ a[i]=a[idx++]; } } ans++; } maxn=0; for(int i=1;i<=m;i++){ maxn=max(maxn,a[i]); } cout<<ans+maxn; return 0; }
龙LONG Aaa<(゚Д゚)>
在做的时候出现了一点小问题。 第三个点RE了,没事,数组范围大一点就行了
zhouty
米哈游啊游我们喜欢你
#include<bits/stdc++.h> using namespace std; int n,w[11000],m,ans,maxx; int main(){ scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&w[i]); int t=m+1; while(t<=n+1){ for(int i=1;i<=m;i++){ w[i]--; if(w[i]==0){ w[i]=w[t]; t++; } } ans++; } for(int i=1;i<=m;i++) { maxx=max(maxx,w[i]); } cout<<ans+maxx<<endl; }
^
其实不用队列,模拟就行了
AC概率0%
复仇者_黑客_ZDZL
#include<bits/stdc++.h> using namespace std; int n,m,o; int main() { cin>>n; cin>>m; int now=m+1,w[10001];//now存储了下一个要接水的人的编号 w[0]=0;//这玩意是我拿来存水的总量的 for(int i=1;i<=n;i++) { cin>>w[i]; w[0]+=w[i]; } while(w[0]!=0) { for(int i=1;i<=m;i++) { if(w[i]>0)//如果水还没接完,接水,同时水的总量减少 { w[i]--; w[0]--; } if(w[i]==0)//如果这个人水接完了,下一个人排进来,同时清空 { w[i]=w[now]; w[now]=0; if(now!=n)now++;//前面的if一定要写,不然接水的人就无穷无尽了 } } o++;//时间+1 } cout<<o; return 0; }
卡布叻·琉璃
#include <iostream> using namespace std; int s[11000],ans; // 根据t的终止条件来想下s的大小 int main() { int n,m;cin>>n>>m; for(int i=1;i<=n;i++) cin>>s[i]; // 输入每个学生的接水量 int t=m+1; // t用来记录下个学生的编号 while(t<=n+m) { for(int i=1;i<=m;i++) // 枚举m个水龙头 { s[i]--; if(s[i]==0) { s[i]=s[t]; // 如果这个学生的水接完了 模拟换下一个学生来这个水龙头 t++; } } ans++; // 以上是模拟的1秒钟的接水时间 所有ans加一 } cout<<ans; return 0; }
袁骁
#include<bits/stdc++.h> using namespace std; int a[200]; int main(){ int n,m;cin>>n>>m; for(int i=0;i<n;i++){ int x,mi=0;cin>>x; for(int j=0;j<m;j++){ if(a[mi]>a[j])mi=j; } a[mi]+=x; } sort(a,a+m); cout<<a[m-1]; return 0; }
155****3717