Codeforces Round #373 (Div. 2)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #373 (Div. 2)相关的知识,希望对你有一定的参考价值。

第一次打codeforces,打得不行。

 

A. Vitya in the Countryside

    简单题,给出一串序列,0,1,2...,14,15,14,...2,1,0,1 判断之后是增加还是减少,无法判断输-1

    题意就很简单,但是由于网络问题,这题一直没加载出来,直到30分钟的时候才出来,好气啊。

 

 

#include <bits/stdc++.h>

using namespace std;

int main(){
    int n,a,b,t;
    scanf("%d",&n);
    if(n==1){
        scanf("%d",&t);
        if(t==0) puts("UP");
        if(t==15) puts("DOWN");
        if(t!=0&&t!=15) puts("-1");
    }
    else{
        for(int i=1;i<=n-2;i++) scanf("%d",&t);
        scanf("%d%d",&a,&b);
        string ans="";
        if(b>a){
            if(b==15) ans="DOWN";
            else      ans="UP";
        }
        if(b<a){
            if(b==0) ans="UP";
            else     ans="DOWN";
        }
        
        cout<<ans<<endl;
    }
    return 0;
} 

 

 

 B. Anatoly and Cockroaches

 

    n个蝗虫,共两种颜色,要求摆出rbr...或者brb...这种交错的样子,可以交换任意俩,或者改变一个的颜色,求操作最小次数。

   即求 原序列与 rbrb.... brbr.....相差的个数中小的那个。

 

 

#include <bits/stdc++.h>

using namespace std;

char ch[111111],tmp[111111];

int main(){
    int n;
    scanf("%d\n",&n);
    
    for(int i=1;i<=n;i++) scanf("%c",&ch[i]);
    
    int t1=0,t2=0;
    for(int i=1;i<=n;i++){
        if(i%2==1)
            if(ch[i]==b) t1++; 
        if(i%2==0)
            if(ch[i]==r) t2++;
    }
    int ans=max(t1,t2);
    
    t1=0,t2=0;
    
    for(int i=1;i<=n;i++){
        if(i%2==1)
            if(ch[i]==r) t1++; 
        if(i%2==0)
            if(ch[i]==b) t2++;
    }
    ans=min(ans,max(t1,t2));
    
    printf("%d\n",ans);
    
    return 0;
}

 

C.

给一个数字,可以查看t次,每次查看可以四舍五入。算法就是贪心,五入小数点后最前面的以为大于等于5的,然后进位就好了。

#include <bits/stdc++.h>
using namespace std;

const int MAXN = 200000 + 5;
int T, N, M;
char buf[MAXN];
int dot, pos;
inline bool finish() {
    return (dot == -1 || pos == -1);
} 

int main() {
    while(~scanf("%d %d", &N, &T)) {
        scanf("%s", buf);
        bool overflow = false;
        dot = -1, pos = -1;
        for(int i = 0; buf[i]; i++) {
            if(buf[i] == .) {
                dot = i;
                break;
            }
        }
        for(int i = dot + 1; buf[i]; i++) {
            if(buf[i] >= 5) {
                pos = i;
                buf[i + 1] = \0;
                break;
            }
        }
        while(T --) {
            if(finish()) break;
            if(buf[dot + 1] >= 5) {
                buf[dot + 1] = buf[dot] = \0;
                int j = dot - 1;
                while(j >= 0 && buf[j] == 9) {
                    buf[j] = 0;
                    j --;
                }
                if(j < 0 && buf[j + 1] == 0) overflow = true;
                else buf[j] ++;
                break;
            }
            buf[pos] = \0;
            buf[pos - 1] ++;
            if(buf[pos - 1] < 5) pos = -1;
            else pos --;
        }
        if(overflow) printf("1");
        printf("%s\n", buf);
    }
    return 0;
}

 

以上是关于Codeforces Round #373 (Div. 2)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #373 (Div. 2) B

Codeforces Round #373 (Div. 2)

Codeforces Round #373 (Div. 2)

Codeforces Round #373 (Div. 2)

Codeforces Round #373 (Div. 2)

Codeforces Round #373 (Div. 2)