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

    CF 复仇者联盟场。。。

    水题 A - Hulk(绿巨人)

    输出love hate。。。

    #include <bits/stdc++.h>
    
    typedef long long ll;
    const int N = 1e5 + 5;
    
    int main() {
        int n;
        scanf ("%d", &n);
        printf ("I hate");
        for (int i=1; i<n; ++i) {
            if (i & 1) printf (" that I love");
            else printf (" that I hate");
        }
        puts (" it");
        return 0;
    }
    

    博弈+打表找规律 B - Spider Man(蜘蛛侠)

    注意到每次多一个圈,之前的还是初始状态,各组是独立的,所以打个表或者分析一下就能找到规律。

    #include <bits/stdc++.h>
    
    typedef long long ll;
    const int N = 1e5 + 5;
    int a[N];
    int sg[105];
    
    int SG(int x) {
        if (x < 2) return sg[x] = 0;
        bool vis[105];
        memset (vis, false, sizeof (vis));
        for (int i=1; i<x; ++i) {
            vis[SG (i) ^ (SG (x-i))] = true;
        }
        int &ret = sg[x] = 0;
        while (vis[ret]) ret++;
        return ret;
    }
    
    void test() {
        memset (sg, -1, sizeof (sg));
        for (int i=1; i<=20; ++i) {
            printf ("sg[%d]=%d
    ", i, SG (i));
        }
    }
    
    int main() {
        //test ();
        int n;
        scanf ("%d", &n);
        for (int i=1; i<=n; ++i) scanf ("%d", a+i);
        int ans = 0;
        for (int i=1; i<=n; ++i) {
            int res = a[i] & 1 ? 0 : 1;
            ans ^= res;
            printf ("%d
    ", ans ? 1 : 2);
        }
        return 0;
    }
    

    构造 C - Thor(雷神)

    题意:一个手机有n个应用,有三种操作:

    1. 第x个应用有一个未读信息;

    2. 读完当前第x个应用的所有未读信息;

    3. 读完最前面t个信息(信息可能被重读);

    每次操作后输出当前未读信息的条数。

    思路:第3个操作“最前面t个”很关键,那么只要进行max(t) 次操作。如果要读的信息在之后时间点被读掉(第2种操作)那就不更新,那么维护下最新的“清空”的应用编号和时间即可。之前有个地方写了continue,结果答案没输出,WA了好久。

    #include <bits/stdc++.h>
    
    typedef long long ll;
    const int N = 3e5 + 5;
    
    int cnt[N];
    int clear_time[N];
    std::pair<int, int> que[N];
    
    int main() {
        int n, q;
        scanf ("%d%d", &n, &q);
        int m = 0, ans = 0;
        int tp, x, t, maxt = 0;
        for (int i=1; i<=q; ++i) {
            scanf ("%d", &tp);
            if (tp == 1 || tp == 2) {
                scanf ("%d", &x);
                if (tp == 1) {
                    cnt[x]++;
                    ans++;
                    que[++m] = {x, i};
                } else {
                    ans -= cnt[x];
                    cnt[x] = 0;
                    clear_time[x] = i;
                }
            } else {
                scanf ("%d", &t);
                if (t > maxt) {
                    for (int j=maxt+1; j<=t; ++j) {
                        int pos = que[j].first, tim = que[j].second;
                        if (clear_time[pos] >= tim) continue;
                        cnt[pos]--;
                        ans--;
                    }
                    maxt = t;
                }
            }
            printf ("%d
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    Java 异常处理机制和集合框架
    如何在Windows 下安装Python
    公司为啥要上市?上市对公司有什么好处?
    MongoDB Driver:使用正确的姿势连接复制集
    mongodb复制集开启安全认证
    关于 MongoDB 复制集
    如何高效的使用 Git
    Linux shell常用命令
    MongoDB 查看所有用户账号信息
    MongoDB开启安全认证
  • 原文地址:https://www.cnblogs.com/Running-Time/p/5750233.html
Copyright © 2011-2022 走看看