链接:https://ac.nowcoder.com/acm/contest/9033/A
来源:牛客网
题目描述
小A去参加W大学的一个招生项目.
除了小A,还有n个人报名了W大学的这个招生项目,而W大学只招收m个人.
每个人有一个高考分和一个校测分,分数都是非负整数,满分都是p,分数都不大于p.
因为小A优异的竞赛成绩,W大学给了小A承诺,他将会校测给满分.
然后每个人的最终得分为 高考分85% + 校测分15%.
最终得分从高到低排前m高的将被录取,如果有同分,小A将优先被录取.
求小A高考至少要考到多少分才能被W大学录取.
题目本身不难,难的是有一个特殊情况没有考虑,如果小A只靠校测分就可以入取,那题目就解决了
上代码:
#include using namespace std; int main() { int n,m,p; scanf("%d%d%d",&n,&m,&p); int a[n],b[n]; double c[n]; int i; for(i=0;i<n;i++) { scanf("%d%d",&a[i],&b[i]); } for(i=0;i<n;i++) { c[i] = a[i]*0.85+b[i]*0.15; } sort(c,c+n); double x; x = (c[n-m]-0.15*p)/0.85; if(x<0) printf("0"); else printf("%.0f",ceil(x)); return 0; }
链接:https://ac.nowcoder.com/acm/contest/9033/B
来源:牛客网
很久很久以前的idea.
给你一个序列c,长度为n。
现在有一个序列a,长度为n。 对于: 如果ci=0c_i = 0ci=0 并且i>1那么ai=ai−1a_i = a_{i-1}ai=ai−1。 如果ci=1c_i = 1ci=1并且iai=ai+1a_i=a_{i+1}ai=ai+1。 现在求序列a中最多有多少种不同的数字。
找规律题,主要是分析出0和1的妙处,出现01连续的时候可以看出左右俩个数无关系,左边只和它的左边有关系,右边只和右边有关系,所以,出现01时就就可以有不同的数值出现;
没有01时,只有一种,有一个时就分成俩组,俩组没联系,就是可以有俩种数值,一直细分,索引01的出现次数,答案也就出来了,上代码
#include <algorithm> #include <cmath> using namespace std; int main() { int n,i; scanf("%d",&n); int a[n],flag=0; for(i=0;i<n;i++) scanf("%d",&a[i]); int sum =1; for(i=0;i<n-1;i++) { if(a[i]==0) { if(a[i+1]==1) { sum++;i++; } } } printf("%d",sum); return 0; }