• AtCoderBeginnerContest109题解


    第一次AK,真爽qwq

    A

    很zz啊,,直接判断三种情况就行

    /*
     
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<map>
    #include<vector>
    #include<set>
    #include<queue>
    #include<cmath>
    //#include<ext/pb_ds/assoc_container.hpp>
    //#include<ext/pb_ds/hash_policy.hpp>
    #define Pair pair<int, int>
    #define MP(x, y) make_pair(x, y)
    #define fi first
    #define se second
    #define int long long 
    #define LL long long 
    #define ull unsigned long long 
    #define rg register 
    #define pt(x) printf("%d ", x);
    //#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1<<22, stdin), p1 == p2) ? EOF : *p1++)
    //char buf[(1 << 22)], *p1 = buf, *p2 = buf;
    //char obuf[1<<24], *O = obuf;
    //void print(int x) {if(x > 9) print(x / 10); *O++ = x % 10 + '0';}
    //#define OS  *O++ = ' ';
    using namespace std;
    //using namespace __gnu_pbds;
    const int MAXN = 1e6 + 10, INF = 1e9 + 10, mod = 1e9 + 7;
    const double eps = 1e-9;
    inline int read() {
        char c = getchar(); int x = 0, f = 1;
        while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
        while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
        return x * f;
    }
    int check(int a, int b, int c) {
        return a * b * c & 1;
    }
    main() {
        int A = read(), B = read();
        if(check(1, A, B) || check(2, A, B) || check(3, A, B)) puts("Yes");
        else puts("No");
     
     
     
     
        return 0;
    }
    /*
    2 2 1
    1 1
    2 1 1
    */
    A

    B

    直接模拟即可

    /*
     
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<map>
    #include<vector>
    #include<set>
    #include<queue>
    #include<cmath>
    //#include<ext/pb_ds/assoc_container.hpp>
    //#include<ext/pb_ds/hash_policy.hpp>
    #define Pair pair<int, int>
    #define MP(x, y) make_pair(x, y)
    #define fi first
    #define se second
    #define int long long 
    #define LL long long 
    #define ull unsigned long long 
    #define rg register 
    #define pt(x) printf("%d ", x);
    //#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1<<22, stdin), p1 == p2) ? EOF : *p1++)
    //char buf[(1 << 22)], *p1 = buf, *p2 = buf;
    //char obuf[1<<24], *O = obuf;
    //void print(int x) {if(x > 9) print(x / 10); *O++ = x % 10 + '0';}
    //#define OS  *O++ = ' ';
    using namespace std;
    //using namespace __gnu_pbds;
    const int MAXN = 1e6 + 10, INF = 1e9 + 10, mod = 1e9 + 7;
    const double eps = 1e-9;
    inline int read() {
        char c = getchar(); int x = 0, f = 1;
        while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
        while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
        return x * f;
    }
    map<string, bool> mp;
    int N;
    string s[MAXN];
    main() {
        int N = read();
        
        for(int i = 1; i <= N; i++) {
            cin >> s[i];
            if(mp.find(s[i]) != mp.end()) {puts("No"); return 0;}
            if(i > 1) {
                int l = s[i - 1].length();
                if(s[i][0] != s[i - 1][l - 1]) {puts("No"); return 0;
                }
            }
            mp[s[i]] = 1;
        }
        puts("Yes");
     
        return 0;
    }
    /*
    2 2 1
    1 1
    2 1 1
    */
    B

    C

    一开始想二分来着,然后发现我zz了。

    直接输出 所有距离与起始距离的最大公约数即可

    证明显然。。。

    /*
     
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<map>
    #include<vector>
    #include<set>
    #include<queue>
    #include<cmath>
    //#include<ext/pb_ds/assoc_container.hpp>
    //#include<ext/pb_ds/hash_policy.hpp>
    #define Pair pair<int, int>
    #define MP(x, y) make_pair(x, y)
    #define fi first
    #define se second
    #define int long long 
    #define LL long long 
    #define ull unsigned long long 
    #define rg register 
    #define pt(x) printf("%d ", x);
    //#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1<<22, stdin), p1 == p2) ? EOF : *p1++)
    //char buf[(1 << 22)], *p1 = buf, *p2 = buf;
    //char obuf[1<<24], *O = obuf;
    //void print(int x) {if(x > 9) print(x / 10); *O++ = x % 10 + '0';}
    //#define OS  *O++ = ' ';
    using namespace std;
    //using namespace __gnu_pbds;
    const int MAXN = 1e6 + 10, INF = 1e9 + 10, mod = 1e9 + 7;
    const double eps = 1e-9;
    inline int read() {
        char c = getchar(); int x = 0, f = 1;
        while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
        while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
        return x * f;
    }
    int N, a[MAXN];
    main() {
        int N = read(), X = read();
        for(int i = 1; i <= N; i++) a[i] = read();
        int g = abs(X - a[1]);
        for(int i = 2; i <= N; i++) {
            int dis = abs(X - a[i]);
            g = __gcd(g, dis);
        }
        printf("%d", g);
        return 0;
    }
    /*
    2 2 1
    1 1
    2 1 1
    */
    C

    D

    一开始读错题了,我以为移动几个都可以,事实上只能移动一个qwq,而且我以为0不统计入答案

    我还特地问了一下,真没想到他居然知道我问的什么

    考虑一个很显然的正确做法。。

    先把所有奇数点往下移动,直到移动到最后一行

    再把最后一行的奇数点从左往右移动。。

    /*
     
    */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<map>
    #include<vector>
    #include<set>
    #include<queue>
    #include<cmath>
    //#include<ext/pb_ds/assoc_container.hpp>
    //#include<ext/pb_ds/hash_policy.hpp>
    #define Pair pair<int, int>
    #define MP(x, y) make_pair(x, y)
    #define fi first
    #define se second
    //#define int long long 
    #define LL long long 
    #define ull unsigned long long 
    #define rg register 
    #define pt(x) printf("%d ", x);
    //#define getchar() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1<<22, stdin), p1 == p2) ? EOF : *p1++)
    //char buf[(1 << 22)], *p1 = buf, *p2 = buf;
    //char obuf[1<<24], *O = obuf;
    //void print(int x) {if(x > 9) print(x / 10); *O++ = x % 10 + '0';}
    //#define OS  *O++ = ' ';
    using namespace std;
    //using namespace __gnu_pbds;
    const int MAXN = 501, INF = 1e9 + 10, mod = 1e9 + 7;
    const double eps = 1e-9;
    inline int read() {
        char c = getchar(); int x = 0, f = 1;
        while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
        while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
        return x * f;
    }
    int N, M;
    int a[MAXN][MAXN];
    int xx[6] = {0, -1, +1, 0, 0};
    int yy[6] = {0, 0, 0, -1, +1};
    int ans[MAXN * MAXN][7], cnt = 0;
    void add(int i, int j, int wx, int wy) {
        ans[++cnt][0] = i;
        ans[cnt][1] = j;
        ans[cnt][2] = wx;
        ans[cnt][3] = wy;    
    }
    main() {
        N = read(); M = read();
        for(int i = 1; i <= N; i++)
            for(int j = 1; j <= M; j++)
                a[i][j] = read();
        for(int i = 1; i < N; i++) {
            for(int j = 1; j <= M; j++) {
                if(a[i][j] & 1) {
                    int wx = i + 1, wy = j;
                    a[i][j]--; a[wx][wy]++;
                    add(i, j, wx, wy);
                }
            }
        }
        for(int i = 1; i < M; i++) {
            if(a[N][i] & 1) {
                a[N][i]--; a[N][i + 1]++;
                add(N, i, N, i + 1);
            }
        }
        printf("%d
    ", cnt);
        for(int i = 1; i <= cnt; i++) 
            printf("%d %d %d %d
    ", ans[i][0], ans[i][1], ans[i][2], ans[i][3]);
        return 0;
    }
    /*
    2 2 1
    1 1
    2 1 1
    */
    D
  • 相关阅读:
    antdesign vue 官网地址
    WMS智能仓储管理系统-干货-产品介绍
    C# 判断文件夹与文件是否存在
    C# 获取文件大小,创建时间,文件信息,FileInfo类的属性表
    问题2:采购发票、材料出库单、到货单,打开时提示某某插件是否安装! 问题
    问题一:u813.0销售出库单-EAI接口报-在对应所需名称或序数的集合中,未找到项目
    SqlServer数据库sa登录失败,错误18456
    解决<compilation debug="true" targetFramework="4.0"> 问题
    SQL Server 2005无法远程连接的解决方法
    Windows Server 2008 IIS 7.5 HTTP 错误 404.3
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/9614663.html
走看看 - 开发者的网上家园