• Codeforces Round #347 (Div. 2)


    unrating的一场CF

    A - Complicated GCD

    #include <bits/stdc++.h>
    
    const int N = 1e5 + 5;
    char a[105], b[105];
    
    bool equal() {
        int lena = strlen (a);
        int lenb = strlen (b);
        if (lena != lenb) {
            return false;
        }
        for (int i=0; i<lena; ++i) {
            if (a[i] != b[i]) {
                return false;
            }
        }
        return true;
    }
    
    int main() {
        scanf ("%s%s", a, b);
        if (equal ()) {
            printf ("%s
    ", a);
        } else {
            puts ("1");
        }
    
        return 0;
    }
    

    贪心 B - Rebus

    取最小最大,从最大调到n

    #include <bits/stdc++.h>
    
    const int N = 1e3 + 5;
    char str[N];
    int n, x, y;
    
    int main() {
        gets (str);
        int len = strlen (str);
        x = 1; y = 0;
        for (int i=0; i<len; ++i) {
            if (str[i] == '+') {
                x++;
            } else if (str[i] == '-') {
                y++;
            } else if (str[i] >= '0' && str[i] <= '9') {
                n = n * 10 + (str[i] - '0');
            }
        }
        int mx = x * n - y;
        int mn = x - n * y;
        if (n > mx || n < mn) {
            puts ("Impossible");
        } else {
            int f = 0, sp = 0;
            int xx = 0, yy = 0, now = mx;
            while (now > n) {
                if (now - n + 1 > n) {
                    now -= (n - 1);
                    if (xx < x) {
                        xx++;
                    } else {
                        yy++;
                    }
                } else {
                    int d = now - n;
                    if (xx < x) {
                        f = -1;
                        sp = n - d;
                    } else {
                        f = 1;
                        sp = 1 + d;
                    }
                    break;
                }
            }
            puts ("Possible");
            for (int i=0; i<len; ++i) {
                if (str[i] == '?') {
                    if (i == 0) {
                        if (f == -1) {
                            printf ("%d", sp);
                            f = 0;
                        } else if (xx > 0) {
                            printf ("1");
                            xx--;
                        } else {
                            printf ("%d", n);
                        }
                    } else {
                        if (str[i - 2] == '+') {
                            if (f == -1) {
                                printf ("%d", sp);
                                f = 0;
                            } else if (xx > 0) {
                                printf ("1");
                                xx--;
                            } else {
                                printf ("%d", n);
                            }   
                        } else {
                            if (f == 1) {
                                printf ("%d", sp);
                                f = 0;
                            } else if (yy > 0) {
                                printf ("%d", n);
                                yy--;
                            } else {
                                printf ("1");
                            }
                        }
                    }
                } else {
                    printf ("%c", str[i]);
                }
            }
            puts ("");
        }
    
        return 0;
    }
    

    贪心 C - International Olympiad

    头晕,看不懂题意

    Consider the abbreviations that are given to the first Olympiads. The first 10 Olympiads (from year 1989 to year 1998) receive one-digit abbreviations (IAO'9, IAO'0, ..., IAO'8). The next 100 Olympiads (1999 - 2098) obtain two-digit abbreviations, because all one-digit abbreviations are already taken, but the last two digits of 100 consecutive integers are pairwise different. Similarly, the next 1000Olympiads get three-digit abbreviations and so on.

    Now examine the inversed problem (extract the year from an abbreviation). Let the abbreviation have k digits, then we know that all Olympiads with abbreviations of lengths (k - 1), (k - 2), ..., 1 have passed before this one. The number of such Olympiads is10k - 1 + 10k - 2 + ... + 101 = F and the current Olympiad was one of the 10k of the following. Therefore this Olympiad was held in years between (1989 + F) and (1989 + F + 10k - 1). As this segment consists of exactly 10k consecutive natural numbers, it contains a single number with a k-digit suffix that matches the current abbreviation. It is also the corresponding year.

    #include <bits/stdc++.h>
    
    char str[20];
    
    int main() {
        int n; scanf ("%d", &n);
        for (int i=0; i<n; ++i) {
            scanf ("%s", str);
            int len = strlen (str + 4);
            int year = atoi (str + 4);
            int add = 0, tenpow = 10;
            for (int j=1; j<len; ++j) {
                add += tenpow;
                tenpow *= 10;
            }
            while (year < 1989 + add) {
                year += tenpow;
            }
            printf ("%d
    ", year);
        }
    
        return 0;
    }
    

      

  • 相关阅读:
    Spring Boot 2 (十):Spring Boot 中的响应式编程和 WebFlux 入门
    开源精神就意味着免费吗?
    是时候给大家介绍 Spring Boot/Cloud 背后豪华的研发团队了。
    springcloud(十五):Spring Cloud 终于按捺不住推出了自己的服务网关 Gateway
    写年终总结到底有没有意义?
    培训班出来的怎么了?
    【重磅】Spring Boot 2.1.0 权威发布
    一线大厂逃离或为新常态,大龄程序员改如何选择?
    Elastic 今日在纽交所上市,股价最高暴涨122%。
    技术人如何搭建自己的技术博客
  • 原文地址:https://www.cnblogs.com/Running-Time/p/5409463.html
Copyright © 2020-2023  润新知