zoukankan      html  css  js  c++  java
  • Codeforces Round #395 (Div. 2)

    传送门:http://codeforces.com/contest/764

    A题:题意是求1~z之间有多少个数既是n的倍数,也是m的倍数,直接z/lcm(n,m)就行了。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <string>
    #include <stack>
    #include <map>
    #include <set>
    #include <bitset>
    #define X first
    #define Y second
    #define clr(u,v); memset(u,v,sizeof(u));
    #define in() freopen("data","r",stdin);
    #define out() freopen("ans","w",stdout);
    #define Clear(Q); while (!Q.empty()) Q.pop();
    #define pb push_back
    using namespace std;
    typedef long long ll;
    typedef pair<int, int> pii;
    const int maxn = 1e5 + 10;
    const int INF = 0x3f3f3f3f;
    
    int main()
    {
        ll a, b, c;
        cin >> a >> b >> c;
        cout << c / (a / __gcd(a, b)*b) << endl;
        return 0;
    }
    View Code

    B题:给你一个长度为n的序列,让你对该序列进行如下操作,起始指针st=1,end=n,然后对st到end这部分旋转180度,既swap(N[st+i],N[end-i]。一直操作直到st>=end。可以考虑,在交换的时候,一定会有多余的交换,如果我们下标为0开始,那下标为奇数的都是被交换偶数次,可以抵消掉,那我们只要对下标为偶数的进行交换就行了。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <string>
    #include <stack>
    #include <map>
    #include <set>
    #include <bitset>
    #define X first
    #define Y second
    #define clr(u,v); memset(u,v,sizeof(u));
    #define in() freopen("data","r",stdin);
    #define out() freopen("ans","w",stdout);
    #define Clear(Q); while (!Q.empty()) Q.pop();
    #define pb push_back
    using namespace std;
    typedef long long ll;
    typedef pair<int, int> pii;
    const int maxn = 2e5 + 10;
    const int INF = 0x3f3f3f3f;
    int N[maxn];
    int main()
    {
        int n;
        cin >> n;
        for (int i = 0; i < n; i++)
            cin >> N[i];
        for (int i = 0; i < n / 2; i += 2)
            swap(N[i], N[n-i-1]);
        for (int i = 0; i < n; i++)
            cout << N[i] << " ";
        return 0;
    }
    View Code

    C题:给你一棵无根树,每个节点都有一种颜色。现在你要找到一个节点作为根节点,使得这棵树上除了根节点外,其他节点的颜色都要和他子树上的所有点颜色一样。可以记录下每个点与多少个颜色不同的点相连,注意颜色不同的点只可能在根节点处,所以记录下度数就行了。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <string>
    #include <stack>
    #include <map>
    #include <set>
    #include <bitset>
    #define X first
    #define Y second
    #define clr(u,v); memset(u,v,sizeof(u));
    #define in() freopen("data","r",stdin);
    #define out() freopen("ans","w",stdout);
    #define Clear(Q); while (!Q.empty()) Q.pop();
    #define pb push_back
    using namespace std;
    typedef long long ll;
    typedef pair<int, int> pii;
    const int maxn = 2e5 + 10;
    const int INF = 0x3f3f3f3f;
    pii E[maxn];
    int c[maxn];
    int in[maxn];
    int cnt;
    int main()
    {
        int n;
        scanf("%d", &n);
        for (int i = 1; i < n; i++)
            scanf("%d%d", &E[i].X, &E[i].Y);
        for (int i = 1; i <= n; i++)
            scanf("%d", &c[i]);
        for (int i = 1; i < n; i++)
            if (c[E[i].X] != c[E[i].Y])
            {
                cnt++;
                in[E[i].X]++;
                in[E[i].Y]++;
            }
        for (int i = 1; i <= n; i++)
            if (in[i] == cnt)
            {
                puts("YES");
                printf("%d
    ", i);
                return 0;
            }
        puts("NO");
        return 0;
    }
    View Code

    D题:题意是给你n个矩形,相邻的矩形不能有同种颜色,问能否用四种颜色给矩形染色,并输出方案,矩形边长为奇数。由四色定理可以得出答案一定是YES,那如何分配颜色呢?注意到矩形的边长为奇数,那么对于一个矩形,我们只考虑他的左下角的点的下标(x,y),两个矩形左下角的坐标分别为(x1,y1)和(x2,y2),如果x1和x2奇偶性相同,y1和y2奇偶性也相同,那么两个矩形是不可能相交的,因为abs(x1-x2)=边长=奇数,如果x1,x2奇偶性相同,则abs(x1-x2)=偶数,与前面矛盾,y同理。所以如果x1和x2奇偶性相同,y1和y2奇偶性也相同的两个矩形不可能相邻,那么我们可以根据x和y的奇偶性对矩形进行染色,刚好四种颜色,分别对应x奇y奇,x奇y偶,x偶y奇,x偶y偶。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <string>
    #include <stack>
    #include <map>
    #include <set>
    #include <bitset>
    #define X first
    #define Y second
    #define clr(u,v); memset(u,v,sizeof(u));
    #define in() freopen("data","r",stdin);
    #define out() freopen("ans","w",stdout);
    #define Clear(Q); while (!Q.empty()) Q.pop();
    #define pb push_back
    using namespace std;
    typedef long long ll;
    typedef pair<int, int> pii;
    const int maxn = 5e5 + 10;
    const int INF = 0x3f3f3f3f;
    int main()
    {
        int n, x, y;
        scanf("%d", &n);
        puts("YES");
        while (n--)
        {
            scanf("%d%d%*d%*d", &x, &y);
            printf("%d
    ", 2 * (x & 1) + (y & 1) + 1);
        }
        return 0;
    }
    View Code

    这场又是粗心掉分场= =所以没心情到现在才来补题解,越来越弱Orz

  • 相关阅读:
    Spring MVC 处理 Multipart/form-data
    微信/支付宝调用获取用户信息(服务号/小程序)
    springmvc Controller接收前端参数的几种方式总结
    java 远程方法调用(RMI)
    设计模式---结构型模式之适配器模式(Adapter Pattern)
    设计模式----行为型模式之命令模式(Command Pattern)
    设计模式----创建型型模式之单件模式(Singleton pattern)
    设计模式----创建型模式之工厂模式(FactoryPattern)
    java 反射
    设计模式----行为型模式之观察者模式(Observer Pattern)
  • 原文地址:https://www.cnblogs.com/scaugsh/p/6379652.html
Copyright © 2011-2022 走看看