VK Cup 2017

CF上的VK Cup 2017资格赛1,好像很水,因为只有俄文所以语言是最大的障碍……不过之后正式赛貌似就有英文了。(比赛貌似只有开俄文模式才看的到……)

时长1天,不随时间扣分。FallDream dalao跟我组队,我紧抱大腿。共4题,FallDream随手AK,顺便给我面子让我写了道A,我表示非常感激。

A.Год поступления в университет

题目大意:一个人参加了n个小组,给出每个小组的对应年份,能参加一个小组当且仅当这个人的入学年份和小组的年份不超过隐藏的一个值x,求此人入学年份,保证答案唯一存在。(n<=5)

思路:因为唯一存在所以找到小组年份最大最小值相加除以2。

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int n,x,a=0,b=2333;
    for(cin>>n;n--;)cin>>x,a=max(a,x),b=min(b,x);
    cout<<((a+b)>>1);
}

B.Новость о зачёте

题目大意:n个人,第i个人可以至多发ai条短信,第1个人想给所有人发短信,收到短信的可以帮他发,要求构造一个合法方案,无解输出-1。(n<=100,ai<=100)

思路:每次贪心给能发短信最多的人发就可以了。

C.Цикл в лабиринте

题目大意:给出一个n*m的矩阵,每格是空地或者障碍,要求构造一个长度为k的路径从一个点回到这个点,并且这条路径的字典序最小(DLRU下左右上)。(n,m<=1000,k<=10^6)

思路:bfs求出每个点离开始点的最短距离,然后从开始点出发,按字典序顺序判断如果走完还能回到起始点就走,复杂度O(nm+k)。

D.k-Интересные пары чисел

题目大意:n个数,求有多少对数字二进制下相差只有k位。(n<=200,000,0<=k<=14,0<=数字大小<=10^4)

思路:用桶存下各种数字个数,dfs出二进制下有k位1的数,枚举数字,异或上dfs出的数计算答案。复杂度O(10000*C(14,7))

BCD代码见dalao博客

原文地址:https://www.cnblogs.com/ditoly/p/VK-Cup-2017-Q1.html