这是本蒟蒻第一次ATC,虽然前几题是有点水但后面的题还是有一定难度的。
什么?你想看官方题解?告诉你那里面全是日文,进去恐怕除了代码什么都看不懂(~日语巨神除外
言归正传,我们来看一下这一次的题目
A Kth Term
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 int a[32] = {1, 1, 1, 2, 1, 2, 1, 5, 2, 2, 1, 5, 1, 2, 1, 5 14, 1, 5, 1, 5, 2, 2, 1, 15, 2, 2, 5, 4, 1, 4, 1, 51}; 6 int k; 7 int main() { 8 cin >> k; 9 cout << a[k - 1]; 10 return 0; 11 }
B Bishop
这题只要注意一下n=1或m=1的情况即可
#include <iostream> #include <cstdio> using namespace std; long long n, m; int main() { cin >> n >> m; if (n == 1 || m == 1) cout << 1; else cout << (n * m + 1) / 2; return 0; }
C Sqrt Inequality
注意这题卡了精度,所以不能直接开根号(~要不然怎么会出这么弱智的题……
我们需要做一些数学变形
$sqrt{a}+sqrt{b}<sqrt{c}$等价于$a+b+2sqrt{ab}<c$等价于$4ab<(c-a-b)^2$
这样我们只要判断$4ab<(c-a-b)^2$成立与否即可
当然上述式子成立也有条件,那就是$c-a-b>0$,否则题目条件一定不成立
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 long long a, b, c; 5 int main() { 6 cin >> a >> b >> c; 7 if (c - (a + b) < 0) puts("No"); 8 else { 9 if (4 * a * b < a * a + b * b + c * c - 2 * a * c - 2 * b * c + 2 * a * b) puts("Yes"); 10 else puts("No"); 11 } 12 return 0; 13 }
D String Equivalence
这题应该算是签到题里比较难的吧(~逃
(~我们可以先研(打)究(表)找一找规律
我们可以枚举每个位置的字母
但如果真的暴搜的话是$O(n^{2Sigma} imes n^2)$的,显然爆炸
我们考虑greedy,先从前往后枚举每一个位置
对于每一个位置,我们从$'a'$到$‘z’$枚举,找到第一个以前没有出现过的字符,设其为$lim$
则字典序$>lim$的字符都可以变成$lim$,所以直接$break$就好
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 int n; 5 int ans[11]; 6 bool vis[30]; 7 void dfs(int x) { 8 if (x == n) { 9 for (int i = 1; i <= n; i++) { 10 cout << (char)(ans[i] + 'a'); 11 } 12 puts(""); 13 return; 14 } 15 for (int i = 0; i <= 26; i++) { 16 if (vis[i]) { 17 ans[x + 1] = i; 18 dfs(x + 1); 19 } else { 20 vis[i] = 1; 21 ans[x + 1] = i; 22 dfs(x + 1); 23 vis[i] = 0; 24 break; 25 } 26 27 } 28 } 29 int main() { 30 cin >> n; 31 dfs(0); 32 return 0; 33 }
E Three Substrings
咕咕咕
F Fractal Shortest Path
咕王重现江湖