真的恶心
购物(10分钟 100分)
(shop.cpp/c/pas)
【问题描述】
YJC最近在steam上氪了不少金,但他还想氪更多。
steam保证了不同的两款游戏的价格一定不同,并且游戏的价格一定是正整数。现在YJC已经买下了n款不同的游戏,价格分别为a1、a2、...、an。YJC手头还有m元,他想知道他最多还能入手多少款他没有的游戏?
【输入格式】
第一行包含两个整数n和m,表示YJC已经买下的游戏数和YJC的钱数。
第二行包含n个整数ai,表示YJC已经入手的每一款游戏。
【输出格式】
第一行包含一个整数k,表示YJC最多还能买下多少款游戏。
第二行包含k个整数bi,表示YJC接下来要买下的每一款游戏。如果有多组解,输出字典序最小的。
【输入输出样例】
shop.in |
shop.out |
4 14 4 6 8 12 |
4 1 2 3 5 |
【数据说明】
对于100%的数据,满足1≤n≤10^5,1≤m,ai≤10^9。
1≤m,ai≤10^9,ai太大只能用神奇的方法。设置一个下标k,并枚举价钱,如果价钱等于ak,则k++,否则处理价钱,这里输出非常坑爹,需要做两遍,一遍求可以买多少游戏,另一遍求买哪些游戏。立方根(30分钟 30分)
(math.cpp/c/pas)
【问题描述】
YJC最近在学习无理数的近似值。现在他遇到这样一道题:给一个正整数n,求一个分母不超过m的最简分数p/q,使得|p/q-n^2/3|最小。YJC发现他不会做,所以来向你求助。
【输入格式】
第一行包含两个整数n和m,意思如题所示。
【输出格式】
一行,包含一个最简分数,写成p/q的形式,表示求的这个最简分数。
【输入输出样例】
math.in |
math.out |
2 100000 |
153008/96389 |
【数据说明】
对于100%的数据,满足1≤n<2^31,1≤m≤10^5。
由于公式要求最小,则应使p/q与n^2/3最相近,枚举q(1-m)即可,这里要注意必须用long double,double被卡了70分的精度,强制类型转换的时候必须带上括号。取石子(2小时 0分)
(nim.cpp/c/pas)
【问题描述】
YJC在和CJY玩取石子游戏。规则是这样的:有n堆石子,双方轮流操作,每次选择一堆石子进行操作,不能操作者负。操作有两种:从一堆取走一颗石子或将一个石子数为2x(x>0)的石子堆变成m堆石子数为x的石子堆。现在YJC抢到了先手,他想知道自己能不能赢。
【输入格式】
第一行包含两个整数n和m,表示石子堆数和第二种操作的参数。
第二行包含n个整数ai,表示每一堆石子的数量。
【输出格式】
如果YJC胜利则输出YJC,否则输出CJY。
【输入输出样例】
nim.in |
nim.out |
3 3 2 2 3 |
YJC |
【数据说明】
对于30%的数据,满足n,m,ai<=3。
对于100%的数据,满足1≤n≤10^5,1≤m,ai≤10^9。
P.S.本题使用捆绑测试,一个测试点包含多个测试数据。
刚开始看到觉得是贪心,然后用贪心杠了2小时……结果因为这个捆绑测试爆0。这真的刺激。
最远点(50分钟 0分)
(graph.cpp/c/pas)
【问题描述】
YJC最近在学习图论。今天他在学习最远点。
最远点指在图的点上或边上的某一个点,满足这个点到图所有顶点的距离和最大。
现在YJC找了一张完全图,希望能算出它的最远点到图所有顶点的距离和。但他发现他不会算,所以他来找你帮忙。
【输入格式】
第一行包含一个整数n,表示图的顶点数。
接下来n行每行n个整数wi,j,表示点i和点j之间的边的边权。保证wi,j=wj,i,wi,i=0。
【输出格式】
输出一个数,表示最远点到图所有顶点的距离和。答案保留4位小数。
【输入输出样例】
graph.in |
graph.out |
3 0 1 2 1 0 3 2 3 0 |
6.0000 |
【数据说明】
对于30%的数据,满足n,wi,j≤10。
对于100%的数据,满足1≤n≤300,1≤wi,j≤10000。
看到就爆炸,写了个神奇的一重循环+双重DFS。结果爆0。