6 solutions
-
1
题解
这个题看似属于分开看挺难,整体看就还好,先按照每天的僵尸都会收取,然后算出每只僵尸会吃脑子的总数,然后存入数组,在从小到大进行排序,最后从小到大加僵尸会吃的脑子总数和所拥有的脑子总数进行比较,保证吃的比拥有的少即可,顺便统计将是个数并输出,上代码:
代码
#include<bits/stdc++.h> #include<iostream> #include<algorithm> #include<iomanip> using namespace std; int x[100000000],y[17]; char a[11],b[18]; struct Main{ char a[20]; int cheng; }pp[300]; int cmp(Main x,Main y){ return x.cheng>y.cheng; } int main() { int n,m,tian,shu=0; cin>>n>>m; tian=n; for(int i=1;i<=n;i++){ int jiang; cin>>jiang; x[i]=jiang*tian;//每只僵尸会吃脑子的总数 //cout<<x[i]<<endl; tian--; } sort(x+1,x+n+1);//排序 for(int i=1;i<=n;i++){ shu+=x[i]; if(shu>m){//比较吃的脑子和你的库存 cout<<i-1<<endl; break; } } if(shu<=m){ cout<<n<<endl; } return 0; }
-
0
出题人在此
注意僵尸收养了之后就要对它负责到底一直喂养,别的没啥卡点,直接每个僵尸可能消耗的 脑子数排序就好
上代码
#include<bits/stdc++.h> using namespace std; int main() { int n,x,a[1005]={0},cnt=0,sum=0; scanf("%d %d",&n,&x); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); a[i]=a[i]*(n-i+1); } sort(a+1,a+n+1); for(int i=1;i<=n;i++) { if(sum+a[i]<=x)cnt++,sum=sum+a[i]; else break; } printf("%d",cnt); return 0; }
-
0
这题需要注意的是当养了一只僵尸后,这只僵尸就要一直被养下去,他需要的消耗是从他来的那天开始一直到不养他的那天,为提高收养量,需将收养成本降到最小,即在有限成本条件下,将消耗排序
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; const int N=1e3+10; int a[N]; int main(){ int n,sum,ans=0; cin>>n>>sum; for(int i=1;i<=n;i++) { cin>>a[i]; a[i]*=(n-i+1); } sort(a+1,a+n+1); while(ans<n){ sum-=a[ans+1]; if(sum<0) break; ans++; } printf("%d",ans); return 0; }
-
0
P1024. 僵尸水族馆
题意概述
一大波僵尸袭来,每个僵尸每天都会吃一定的脑子。在脑子数量固定的情况下、收养天数固定下,尽可能多的收养僵尸。
题意分析
必定是,吃得少的优先收养啊。怎么算一个僵尸将要吃多少脑子呢?当然是,收养那天开始到结束之间的天数乘以每天僵尸要吃的脑子数呀。 得到这个数据后,再对食量进行升序排序,然后再依次加入僵尸保证食量不超过所拥有的脑子数。 细节:先判断加入是否会超过总数再考虑加不加
可行代码
#include <algorithm> #include <iostream> using namespace std; int main() { int days, js; cin >> days >> js; int brain[days]; for (int i = 0; i < days; i++) { cin >> brain[i]; brain[i] *= days - i; } sort(brain, brain + days); int sum = 0, ans = 0; for (int i = 0; sum <= js && i < days; i++) { if (sum + brain[i] <= js) sum += brain[i], ans++; } cout << ans << endl; return 0; }
-
0
思路 by zoey
我觉得挺简单的这题,主要就是考排序。 首先把每一个僵尸假如收养后需要吃的总脑子数算出来,即a*(n-僵尸来的日子),存入数组sum,再将数组进行从小到大的排序,冒泡排序是比较简单的排序方式但时间复杂度高,但我这道题数据给的小所以可以过。然后再将sum数组里的数据从小到大相加,加起来的和大于学姐喂的总脑子数break即可,然后边加边统计一共加了多少次,总次数就是最终答案。
code
#include<bits/stdc++.h> using namespace std; const int N = 1e3+10; int a[N]; int n,x; int main() { scanf("%d%d",&n,&x); for(int i = 0;i < n; ++i) { scanf("%d",&a[i]); a[i] *= (n-i); } sort(a,a+n);//可以用冒泡排序代替 int ans = 0; for(int i = 0;i < n; ++i) { if(x - a[i] < 0) break; ans++; x -= a[i]; } printf("%d\n",ans); return 0; }
- 1
Information
- ID
- 25
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 7
- Tags
- # Submissions
- 288
- Accepted
- 66
- Uploaded By