首页 > 其他 > 详细

CF1293A - ConneR and the A.R.C. Markland-N 题解

时间:2020-01-28 21:22:29      阅读:136      评论:0      收藏:0      [点我收藏+]

这道题虽然是 Div2A,但是听说很多选手在比赛时思考了很久,甚至出现了比赛开始后 5min 左右排名榜第一面的许多人都是 AC 了 B 而没有通过 A...遂写了这篇题解.
首先可以确定的是,显然 \(O(tn)\) 的暴力做法无法通过此题,因为 \(t\)\(n\) 已经分别达到了 \(10^3\)\(10^9\) 的级别,纵使 CF 的评测机跑得飞快也无法 AC.
然后就有了一个桶排的思想,但是显然会 MLE...然而,这个世界上有一个叫 map(或者set)的东西...
于是,就 AC 了...
时间复杂度 \(O(tk\log k)\).

Code:

#pragma GCC optimize(2)
#include <bits/stdc++.h>
using namespace std;
int t,n,s,k;
map<int,bool> mp;
void rd(int&);
void wt(int);
int main() {
    //freopen("1.in","r",stdin);
    //freopen("1.out","w",stdout);
    rd(t);
    while (t--) {
        rd(n),rd(s),rd(k);
        for (int i=1;i<=k;i++) {
            int x;
            rd(x);
            mp[x]=true;
        }
        for (int i=0;;i++)
            if ((!mp[s+i]&&s+i<=n)||(!mp[s-i]&&s-i>0)) {
                wt(i);
                putchar('\n');
                break;
            }
        mp.clear();
    }
    return 0;
}
void rd(int& x) {
    x=0;
    char ch=getchar();
    while (!isdigit(ch))
        ch=getchar();
    while (isdigit(ch)) {
        x=x*10+ch-48;
        ch=getchar();
    }
}
void wt(int x) {
    if (x>9)
        wt(x/10);
    putchar(x%10+48);
}

CF1293A - ConneR and the A.R.C. Markland-N 题解

原文:https://www.cnblogs.com/Xray-luogu/p/12238858.html

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