第一题题目没看懂
团的蛋糕铺长期霸占着美团APP中“蛋糕奶茶”栏目的首位,因此总会吸引各路食客前来探店。
小团一天最多可以烤n个蛋糕,每个蛋糕有一个正整数的重量。
早上,糕点铺已经做好了m个蛋糕。
现在,有一个顾客要来买两个蛋糕,他希望买这一天糕点铺烤好的最重的和最轻的蛋糕,并且希望这两个蛋糕的重量恰好为a和b。剩余的n-m个蛋糕可以现烤,请问小团能否满足他的要求
按答案意思是顾客的要求是已经烤好的m个蛋糕的重量应该介于ab之间。
关键理解n是什么作用,n-m是现烤的,现烤的是完全可以满足要求的,如果烤好的已经超过了的话,就得返回false了。
抄了份题解
#includeusing namespace std; int main() { int n, m, a, b; while(~scanf("%d%d%d%d",&n,&m,&a,&b)) { bool f = 0; int k = n-m; if(a < b) swap(a,b); //**条件 if(n >= 2) { if(m == 0) f = 1; else if(m == 1) { int x; scanf("%d",&x); if((x == a || x == b) && k >= 1) f = 1; if(x > b && x < a && k >= 2) f = 1; } else { int Max, Min; for(int i = 0;i < m;i++) { int x; scanf("%d",&x); if(i == 0) Min = x, Max = x; Min = min(Min,x); Max = max(Max,x); } if(Min == b && Max == a) f = 1; if(Min >= b && Max <= a && k >= 2) f = 1; } } if(f) cout<<"YES"< 第二题感觉能做出来,没集中精力,
小团是某综艺节目的策划,他为某个游戏环节设计了一种晋级规则,已知在这个游戏环节中每个人最后都会得到一个分数score_i,显而易见的是,游戏很有可能出现同分的情况,小团计划该环节晋级人数为x人,则将所有人的分数从高到低排序,所有分数大于等于第x个人的分数且得分不为0的人都可以晋级。请你求出本环节的实际晋级人数。显然这个数字可能是0,如果所有人的得分都是0,则没有人满足晋级条件。
错误代码:没有考虑第x个人分数重复会有多个,所以是可能大于x的#include#include #include using namespace std; int main() { int n,x; cin >> n >> x; vector scores(n); for(int i = 0;i < n;i++) { int score; cin >> score; scores[i] = score; } sort(scores.begin(),scores.end(),greater ()); int res = 0; while(res < x) { //cout << scores[res] < break; } res++; } cout << res << endl; return 0; } 正确代码:做了简单的修改,
if(res >= x && scores[res] != scores[x-1]) { break; }把等于的那种情况排除出去
#include#include #include using namespace std; int main() { int n,x; cin >> n >> x; vector scores(n); for(int i = 0;i < n;i++) { int score; cin >> score; scores[i] = score; } sort(scores.begin(),scores.end(),greater ()); int res = 0; while(res < n) { if(res >= x && scores[res] != scores[x-1]) { break; } //cout << scores[res] < break; } res++; } cout << res << endl; return 0; } 小美请小团吃回转寿司。转盘上有N盘寿司围成一圈,第1盘与第2盘相邻,第2盘与第3盘相邻,…,第N-1盘与第N盘相邻,第N盘与第1盘相邻。小团认为第i盘寿司的美味值为A[i](可能是负值,如果小团讨厌这盘寿司)。现在,小团要在转盘上选出连续的若干盘寿司,使得这些寿司的美味值之和最大(允许不选任何寿司,此时美味值总和为0)。
输入描述:
第一行输入一个整数T(1<=T<=10),表示数据组数。每组数据占两行,第一行输入一个整数N(1<=N<=10^5);
第二行输入N个由空格隔开的整数,表示A[1]到A[N](-104<=A[i]<=104)。
输出描述:
每组数据输出占一行,输出一个整数,表示连续若干盘寿司的美味值之和的最大值。输入例子1:
1
4
3 -2 4 -1输出例子1:
6#includeusing namespace std; int main(){ int T,N; cin>>T; for(int i=0;i cin>>N; int Max=INT_MIN,Min=INT_MAX,res; vector arr(N); for(int i=0;i cin>>arr[i]; } int total=0; vector dpMax(N); vector dpMin(N); dpMax[0]=dpMin[0]=arr[0]; total+=arr[0]; //分析,最大值为单个序列最大或是首尾相连(总和减去最小值),取两者最大 for(int i=1;i total+=arr[i]; dpMax[i]=max(dpMax[i-1]+arr[i],arr[i]); dpMin[i]=min(dpMin[i-1]+arr[i],arr[i]); if(Max dpMin[i]) Min=dpMin[i]; } res = max(Max,total-Min); cout<



