首页 > 其他 > 详细

The 2019 Asia Nanchang First Round Online Programming Contest

时间:2019-09-09 01:11:06      阅读:403      评论:0      收藏:0      [点我收藏+]

E. Magic Master

比赛的时候xy用链表弄了一个,赛后发现deque更快,可能原因是deque内存中连续。总之deque是一种高效的数据结构,甚至可以随机访问随机删除,自动管理的分块数组?只不过不能手动在块上维护信息就是麻烦点。

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

deque<int> dq;

int main() {
    int T;
    scanf("%d", &T);
    for(int ti = 1; ti <= T; ++ti) {
        int n, m;
        scanf("%d%d", &n, &m);
        dq.push_back(n);
        for(int i = n - 1; i >= 1; --i) {
            for(int mi = 1; mi <= m; ++mi) {
                dq.push_back(dq.front());
                dq.pop_front();
            }
            dq.push_back(i);
        }

        int Q;
        scanf("%d", &Q);
        for(int qi = 1, q; qi <= Q; ++qi) {
            scanf("%d", &q);
            printf("%d\n", dq[n - q]);
        }
        dq.clear();
    }
    return 0;
}

B. Fire-Fighting Hero

理解错题意了,出题方有点东西。在新的题意背景下所有的消防队是同一个单源出发的,只需要找一个超级源连一条权为0的边即可。

A. Enju With math problem

先暴力判前200个质数防止后面出些小东西。

看起来是要先拉出1.5e8的那几个为数不多的质数,检测一下他们周围是不是有,花的复杂度不高。然后把所有这些质数乘以2得到一些合数2p,那么(除了22=4以外)根据欧拉函数的积性性质,他们的欧拉函数一定是phi(2p)=phi(2)phi(p),根据这些合数定位再找一遍。

根据下面这个验证程序可以知道,当进行了多次筛之后可以保证每个区间都至少包含一个这样的数。

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

const int MAXN = 1e8 + 5e7;
bool np[MAXN + 5];
bool _2p[MAXN + 5], _3p[MAXN + 5];
bool _5p[MAXN + 5], _7p[MAXN + 5];
bool _11p[MAXN + 5], _17p[MAXN + 5];
int p[8444396 + 5], ptop;
void sieve() {
    np[1] = 1;
    ptop = 0;
    for(int i = 2; i <= MAXN; ++i) {
        if(!np[i]) {
            p[++ptop] = i;
        }
        for(int j = 1; j <= ptop; ++j) {
            ll t = i * p[j];
            if(t > MAXN)
                break;
            np[t] = 1;
            if(i % p[j] == 0)
                break;
        }
    }
    //printf("ptop=%d\n",ptop);
    for(int i = 1; i <= ptop; ++i) {
        if(2ll * p[i] > MAXN)
            break;
        _2p[p[i] * 2] = 1;
    }
    for(int i = 1; i <= ptop; ++i) {
        if(3ll * p[i] > MAXN)
            break;
        _3p[p[i] * 3] = 1;
    }
    for(int i = 1; i <= ptop; ++i) {
        if(5ll * p[i] > MAXN)
            break;
        _5p[p[i] * 5] = 1;
    }
    for(int i = 1; i <= ptop; ++i) {
        if(7ll * p[i] > MAXN)
            break;
        _7p[p[i] * 7] = 1;
    }
    for(int i = 1; i <= ptop; ++i) {
        if(11ll * p[i] > MAXN)
            break;
        _11p[p[i] * 11] = 1;
    }
    for(int i = 1; i <= ptop; ++i) {
        if(17ll * p[i] > MAXN)
            break;
        _17p[p[i] * 17] = 1;
    }
    int maxdis = 0, pre = 2;
    for(int i = 3; i <= MAXN; ++i) {
        if((!np[i]) || _2p[i] || _3p[i] || _5p[i] || _7p[i] || _11p[i] || _17p[i]) {
            maxdis = max(maxdis, i - pre);
            pre = i;
        }
    }
    printf("maxdis=%d\n", maxdis);
}

int main() {
    sieve();

    return 0;
}

C. Hello 2019

这个看起来就像早上的wrong那道题。

The 2019 Asia Nanchang First Round Online Programming Contest

原文:https://www.cnblogs.com/Inko/p/11489007.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!