SDIBT_2018SummerVacationTraining_6

996B World Cup

题目链接

题意:给你n个通道,每一分钟一个通道只能进一个人到广场。一开始你站在第一个通道,如果该通道上还有人,你就要站到下一个通道,如果你站到最后一个通道时还不能进入,就站到第一个通道去。

分析:每到一个通道减去该通道已经进去了多少人,再判断该通道排队人数是否小于等于0,如果是,则输出该通道,否则,进入下一个通道,重复刚才的过程。WA了一发,错在每次用通道人数-=已经进去的人数,当他如果不是在第一轮就全部进入的话,会把上一轮减掉的已经进去的人数再减一次,多减掉了一部分。

还有同学讲的用周期,然后用周期来判断:

     1              2            3            4 

k1*n+1   k2*n+2   k3*n+3   k4*n+4   

k1*n+1=a1;

k2*n+2=a2;

k3*n+3=a3;

k4*n+4=a4;

k是每个通道的人全部进入所需要的周期

a是每个通道的人数

n是通道数

比较哪个通道的k值最小并且是最早出现

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
int a[100005];
int main()
{
    int n,i,t,tt;
    while(~scanf("%d",&n))
    {
        for(i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
        }
        t=0;
        for(i=1;i<=n;i++)
        {
            tt=a[i]-t;
            t++;
            if(tt<=0)
            {
                printf("%d\n",i);
                break;
            }
            if(i==n&&tt>0)
            {
                i=0;
            }
        }

    }
    return 0;
}

1004 B. Sonya and Exhibition

题目链接:http://codeforces.com/contest/1004/problem/B

题意:sonya要办一个花卉展,有玫瑰花和百合花,为了让游客数尽可能的多,就得让美丽值最大,美丽值等于游客观赏区间里玫瑰花数量乘以百合花的数量。

分析:如何让数量相乘最大,想想就能知道,让他们数量接近或相等时,相乘最大。当观赏区间花的数量为偶数时,玫瑰花和百合花的数量相等,当观赏区间的花为奇数时,玫瑰花和百合花的数量相差1。然后就是每个观赏区间最大,不管观赏区间有没有相交,只要让一个玫瑰花挨着一个玫瑰花就行,在本子上画画就可以看出来。

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
int main()
{
    int n,m,i,x,y;
    while(~scanf("%d %d",&n,&m))
    {
        for(i=1;i<=m;i++)
            scanf("%d %d",&x,&y);
        for(i=1;i<=n;i++)
        {
            if(i%2==0)
                printf("1");
            else
                printf("0");
        }
        printf("\n");
    }
    return 0;
}

991A. If at first you don't succeed...

题目链接

最简单的容斥原理

题意:一共有N个人,vasya没通过考试,考得好的人选择去A或B餐厅庆祝,考得更好的人AB餐厅都去。去A餐厅的人有a,去B餐厅的人有b,AB餐厅都去的人有c,求没通过考试的人。

分析:当去A餐厅或B餐厅的人小于N时不存在,考得好的人数大于等于总人数时不存在

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
int main()
{
    int a,b,c,n;
    while(~scanf("%d %d %d %d",&a,&b,&c,&n))
    {
        int t;
        if(a<c||b<c)
        {
            printf("-1\n");
            continue;
        }
        else if(a+b-c>=n)
        {
            printf("-1\n");
            continue;
        }
        else
        {
            t=n-a-b+c;
        }
        printf("%d\n",t);
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值