链接: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;
}