题单9
大约 2 分钟
xujc-oj竞赛组题单#9
提示
如果方便可以用万能头:#include<bits/stdc++.h>, 但竞赛中,用万能头会比普通调用更耗时
对角线的数量
数学上规定多边形的对角线是不相邻的两个顶点之间的线段。求正n边形对角线的数量。
公式:m * (m - 3) / 2
paper-cut
罗少有一张长方形的纸,他每次都会把这张纸剪成面积相同的两半(这两半也都是长方形),然后丢掉其中的一半。
罗少总共这样做了 n 次,最后剩下一张长为 a,宽为 b 的长方形,现在请你猜想一下,刚开始的那张纸的周长最短可能是多少。
做一个简单循环:
if (a >= b){
b *= 2;
c = ( b + a )* 2;
}
else{
a *= 2;
c = (b + a) * 2;
}
最后一根稻草
Alice和Bob拿了一堆稻草玩游戏,规定由Alice开始依次轮流拾取一些稻草。每个人每次要么可以拿走一根,要么如果稻草数量是偶数根,还可以选择拿走其中的一半(即如果当前稻草是奇数根,则不能选择拿走一半,只能选择拿走一根)。如果有人拿到了最后一根稻草则获胜。
假设最开始稻草有m根,且Alice和Bob足够聪明,每次都可以做出最正确的选择,那么谁能取胜?
if (m == 1||m==3) cout << "Alice" << endl;
else if (m == 2) cout << "Bob" << endl;
else if (m % 2 == 0) cout << "Alice" << endl;
else cout << "Bob" << endl;
异或运算-3
这道题目很简单,你只需要输出 n 个 n 按位异或的结果就可以了。
按位异或的3个特点: 1.) 0 ^ 0 = 0 , 0 ^ 1 = 1, 0异或任何数=任何数。 2.)1 ^ 0 = 1 , 1 ^ 1 = 0 , 1异或任何数=任何数取反。 3.)任何数异或自己 = 把自己置0。
if (n % 2 != 0) cout << n << endl;
else cout << 0 << endl;