[Codeforces Round #530 (Div. 2)] A,B,C

[Codeforces Round #530 (Div. 2)] A,B,C

前言:

这是一场十分难受的cf,分数1551 → 1548,基本上算是变化不大,4min出的A,有点慢,但是考虑到题意稍微有点坑人,总的来说能够接受,9min莽了一发B,然后就开始开C,C的做法不是特别好,在调试的时候出了一点问题,WA了几发,45min出的C,(这个时候就开始被队友陆陆续续超过了,后期乏力,我恨啊),到最后D都没有调的出来,赛后学长告诉我这个地方用DFS的写法可能会更好一点,还是重新去补一下好了。前期题的速度基本上算是可以保证了,下面补题的重心应该在三四两题了,蓝瘦香菇。

A. Snowball

题意
从某个高度开始有一个雪球滚落,会根据高度不断积攒自己的重量,途中有两块石头,撞到石头要减去石头的重量,如果不足,则置零,但是注意,即使质量为零,雪球也不会停止滚动。
做法
按题意暴力模拟就好了
代码

#include 
using namespace std;
int main()
{
    int n,h;
    scanf("%d%d",&n,&h);
    int u1,u2,d1,d2;
    scanf("%d%d%d%d",&u1,&d1,&u2,&d2);
    for(int i=h;i>0;i--)
    {
        n+=i;
        if(i==d1)
            n = max(0,n-u1);
        if(i==d2)
            n = max(0,n-u2);
    }
    printf("%d",n);
}

B. Squares and Segments

题意
Sofia想做出n个小正方形,问她最少需要用尺规做出几条边。
理解下来的意思就是说,我们需要一个使得(x+y)尽可能小的x*y的表格可以放下n个小正方形。
做法
对n开根号,求出一条边x,另一条对n除x做上取整。
代码

#include 
#include 
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    int ans = sqrt(n);
    ans += (n+ans-1)/ans;
    printf("%d",ans);
}

C. Postcard

题意
给定一个字符串,对于每一个‘ ? ’可以删去或保留前面的一个字符,对于每一个’ * ',可以删去或保留或重复多次前一个字符。再给定一个数,问,是否有满足长度要求和操作要求的串,如果有,输出,如果没有,返回-1。
做法
统计?和*的个数,对不同的情况进行分类处理。
代码

#include 
#include 
#include 
#include 
#include 
using namespace std;
char a[1000];
int main()
{
    scanf("%s",a);
    int k;
    scanf("%d",&k);
    int len = strlen(a);
    int cntc = 0;
    int cnts = 0;
    for(int i=0; i0)
        {
            for(int i=0; i

你可能感兴趣的:(codeforces)