Codeforces Round #111 (Div. 2) AB略 C 看起来挺简单的一道题,看样例显然就是输出a[k/n]和a[k%n],于是WA了两遍… 其实这样是不对的,比如: 1 1 2 11 11 11 11 12 12 21 21 22 1 2 2 2 3 11 12 12 12 13 21 21 21 22 22 22 22 22 22 22 22 22 23 23 23 31 32 32 32 33 test3就是这种数据… 其实应该是a[k/n] a[(k - [...]
Codeforces Beta Round #97 (Div. 2)
Codeforces Beta Round #97 (Div. 2) AB略,现在都忘了是啥题了。。 C 选择数组中的一个数,并把它改为另一个值(和原值不同),排序后求数组所有位置的最小可能值。 显然就是把最大的数改成1。注意特殊情况:数组里所有的数都是1。 当时把10^5的数组开成10^4了。。 D 判断给出的8个点能否构成一个矩形和一个正方形。 用next_permutation搞出排列,用两个向量数量积是否为零判断垂直,四个角都是直角,说明是矩形,四条边长度相等就是菱形,既是矩形又是菱形就是正方形。。 #include <iostream> #include <cstdio> #include <algorithm> using namespace std; const double eps = 1e-9; struct TPoint { int x, y; }point[10]; int index[] = {0, 1, 2, 3, 4, 5, 6, 7}; inline int sgn(double x) { return x>eps?1:x<-eps?-1:0; } [...]
HDU3682 To Be an Dream Architect
题意:一个 n x n x n 的立方体,每次消除一行(平行于坐标轴),共消除 m 次,求共消除了多少 1 * 1 * 1 的小块。(1
HDU4119 Isabella’s Message
给定密文和密文中可能出现的单词,按题意输出原文。 #include <iostream> #include <cstdio> #include <cstring> using namespace std; int n; char map[55][55],temp[55][55],newmap[55][55],mask[55][55]; char word[5][2555]; char list[105][25]; char s[5][10100]; int ans[5][10100]; void rotate() { for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) newmap[j][n-i+1]=temp[i][j]; } void getword(int num) { int pos=0; for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) { if (newmap[i][j]==’*') word[num][pos++]=map[i][j]; } } [...]
HDU4112 Break the Chocolate
将N*M*K的巧克力分成1*1*1,用刀切可以同时切多块,用手掰每次只能将一块掰成两块。 思路:用刀切显然是log2(m)+log2(n)+log2(k)(每个都取上整),手掰的话,首先n-1次掰成n块,然后m-1次掰成m*n块,最后k-1次掰成m*n*k块,(n-1)+n*(m-1)+m*n*(k-1),整理得m*n*k-1。后来看到一种想法,每掰一块多一个,所以就是m*n*k-1次。 #include <iostream> #include <cstdio> #include <cmath> using namespace std; int ans(int n, int m, int k) { return ceil(log(double(n))/log(2.0)) + ceil(log(double(m))/log(2.0)) + ceil(log(double(k))/log(2.0)); } int main() { int t; int n, m, k; cin >> t; for (int i = 1; i <= t; i++) { cin >> n >> m [...]
HDU4121 Xiangqi
只有四种棋子:将、车、马、炮,黑方只有一个将,现在被红方将,红方有2至7个棋子,判断黑方是否被将死。 考虑黑将的四个行动方向,判断每个位置是否被将死即可。 将:判断两个将之间是否有棋子 车:同上 马:八个方向,容易出错,详见代码 炮:将与炮之间是否只有一个棋子 //不考虑黑方飞将也能过,不知道到底该不该考虑。。 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; struct point { int x,y; }g[10], r[10], h[10], c[10]; //bg:black general int gcount, rcount, hcount, ccount; const int dx[] = {-1, 0, 1, 0}; const int dy[] = {0, 1, 0, -1}; const int hx[] = [...]
