20180723 做题记录

1:链接
2018年CodeM大赛-资格赛 B 可乐
题目描述
小美和小团最近沉迷可乐。可供TA们选择的可乐共有k种,比如可口可乐、零度可乐等等,每种可乐会带给小美和小团不同的快乐程度。
TA们一共要买n瓶可乐,每种可乐可以买无限多瓶,小美会随机挑选其中的m瓶喝,剩下的n-m瓶小团喝。
请问应该如何购买可乐,使得小美和小团得到的快乐程度的和的期望值最大?
现在请求出购买可乐的方案。
输入描述:
第一行三个整数n,m,k分别表示要买的可乐数、小美喝的可乐数以及可供选择的可乐种数。
接下来k行,每行两个整数a,b分别表示某种可乐分别给予小美和小团的快乐程度。
对于所有数据,1 <= n <= 10,000, 0 <= m <= n, 1 <= k <= 10,000, -10,000 <= a, b <= 10,000
输出描述:
一行k个整数,第i个整数表示购买第i种可乐的数目。
如果有多解,请输出字典序最小的那个。
对于两个序列 a1, a2, …, ak, b1, b2, …, bk,a的字典序小于b,当且仅当存在一个位置i <= k满足:
ai < bi且对于所有的位置 j < i,aj = bj;
示例1
输入
复制
2 1 2
1 2
3 1
输出
复制
0 2

#include 
#include
using namespace std;
const int inf  = 0x3f3f3f3f;
long double n,m,k,tmp;
long double A[20000],B[20000];
int main()
{
    cin>>n>>m>>k;
    long double ans = -inf;
    for(int i=1;i<=k;i++)
    {
        cin>>A[i]>>B[i];
    }
    int pos =0 ;
    for(int i=1;i<=k;i++)
    {
        tmp = m/n*A[i]+(n-m)/n*B[i];
        if(tmp>=ans)
        {
            ans = tmp;
            pos =  i;
        }
    }
    int top  = 1;

    for(int i=1;i<=k;i++)
    {
        if(top)top = 0;
    else printf(" ");
        if(pos==i)
        {
            cout<else printf("0");
    }

    return 0;
}

做题感悟:期望题有时候可能是水题,当程序函数存在单调性规律时,题目本身会变得十分简单
概率题不要忘记考虑计算贡献。

2 。牛客小白赛 – 异或
链接:https://www.nowcoder.com/acm/contest/135/G

从前,Apojacsleam家的水族箱里,养了一群热带鱼。

在这几条热带鱼里,Apojacsleam特别喜欢一条叫做TbGx(请勿人肉)的热带鱼,所以
每次都让她第一个吃食物。对于每一条鱼,Apojacsleam都有一个顺序,鱼会按照这个顺序排序,
越靠前的地位越高。

吃饱喝足是要睡觉的,这是人的刚需,也是鱼的刚需。

如果TbGx吃了Apojacsleam的食物,她就会睡觉(睡觉时长远小于一天)。这时第二条鱼还是饥肠辘辘的,第二条鱼就可以吃掉TbGx,那么第二条鱼又会睡觉......

注意:Apojacsleam养的鱼比Apojacsleam的智商高到不知道哪里去了,他们都是绝顶聪明的;而他们又是极其守规矩的,即他们不会多鱼分食一条鱼或者食物,只是按照顺序吃;当某一条鱼前面的鱼睡着以后,他可以选择不吃这条鱼,那么别的鱼(还活着的)也不会吃这条,即按照顺序的吃。

一开始,水族箱里只有TbGx一条鱼(未成年),但是,一条鱼成长两天就会成年,成年后就可以繁殖(无性繁殖?别问我我不知道),一天能繁殖一个后代。小鱼也会吃鱼的偶!

请问在前n天中,TbGx最多多少天可以吃饭?

Apojacsleam不希望TbGx饿着,所以你必须在1s内回答。

输入描述:
输入数据有多组,每组一个正整数n,意义如“题目描述”
输出描述:
对于每组输入数据,一行输出:

即前n天中,最多有多少天TbGx可以吃饭。
示例1
输入
复制
6
输出
复制
4
说明
第1天,1条鱼,能吃;
第2天,1条鱼,能吃;
第3天,2条鱼,不能吃;
第4天,3条鱼,能吃;
第5天,5条鱼,能吃;
第6天,8条鱼,不能吃;。

ProblemG:异或(xor)
若一共有 k 条鱼,考虑第 k 条鱼,如果第 k-1 条鱼睡着了,第 k 条鱼可以肆
无忌惮地吃掉第 k-1 条鱼,所以第 k-1 条鱼不敢吃掉第 k-2 条鱼,那么第 k-2 条鱼
就可以肆无忌惮地吃掉第 k-3 条鱼,以此类推,得到若鱼群数量为奇数,则第 TbGx
就可以肆无忌惮地吃食物,否则就不敢吃。
于是问题转化成了:求 Fibnacci 数列前 n 项有多少项是奇数。
所以答案见代码。

#include 
#include
using namespace std;

int main()
{
    long long  n;
    cin>>n;
    cout<<(n*2+2)/3<return 0;
}

3 sb题,可以用来出题
美团codeM资格赛A
https://www.nowcoder.com/acm/contest/138/A
http://axuhongbo.top/paste/view/2eeec198

你可能感兴趣的:(日记,题解)