Codeforces Round #454 D. Seating of Students
2017-12-30 17:37
288 查看
分三类
1 1: 一个就好了
3 3:特殊讨论下
n≥4 或 m≥4 : 第一行奇序号的数放前面,偶序号的数放后面,第二行奇序号的数放前面,偶序号的数放后面,第二行依次类推
有点难写,真的菜
1 1: 一个就好了
3 3:特殊讨论下
n≥4 或 m≥4 : 第一行奇序号的数放前面,偶序号的数放后面,第二行奇序号的数放前面,偶序号的数放后面,第二行依次类推
有点难写,真的菜
#include<iostream> #include<map> #include<iostream> #include<cstring> #include<cstdio> #include<set> #include<vector> #include<queue> #include<cmath> #include<stack> #include<algorithm> using namespace std; typedef long long ll; const int N = 1e5 + 5; #define MS(x,y) memset(x,y,sizeof(x)) #define MP(x, y) make_pair(x, y) const int INF = 0x3f3f3f3f; map<pair<int, int>, int> mp; int vc ; int main() { int n, m; while(~scanf("%d %d", &n, &m)) { mp.clear(); for(int i = 0; i < n; ++i) { for(int j = 0; j < m; ++j) { mp[MP(i, j)] = i*m + j; } } if(n == 1 && m == 1) { printf("YES\n1\n"); }else if(n == 3 && m == 3) { printf("YES\n"); printf("6 1 8\n7 5 3\n2 9 4\n"); }else if(n >= 4) { printf("YES\n"); for(int i = 0; i < m; ++i) { int cnt = 0; for(int j = 0; j < n; ++j) { vc[cnt ++] = mp[MP(j, i)]; } if(n == 4) { if(i & 1) { mp[MP(0, i)] = vc[2]; mp[MP(1, i)] = vc[0]; mp[MP(2, i)] = vc[3]; mp[MP(3, i)] = vc[1]; } else { mp[MP(0, i)] = vc[1]; mp[MP(1, i)] = vc[3]; mp[MP(2, i)] = vc[0]; mp[MP(3, i)] = vc[2]; } continue; } int tt = 0; if(i & 1) { for(int j = 0; j < cnt; j += 2) mp[MP(tt++, i)] = vc[j]; for(int j = 1; j < cnt; j += 2) mp[MP(tt++, i)] = vc[j]; }else { for(int j = 1; j < cnt; j += 2) mp[MP(tt++, i)] = vc[j]; for(int j = 0; j < cnt; j += 2) mp[MP(tt++, i)] = vc[j]; } } for(int i = 0; i < n; ++i) { for(int j = 0; j < m; ++j) printf("%d ", mp[MP(i, j)] + 1); printf("\n"); } }else if(m >= 4) { printf("YES\n"); for(int i = 0; i < n; ++i) { int cnt = 0; for(int j = 0; j < m; ++j) { vc[cnt ++] = mp[MP(i, j)]; } if(m == 4) { if(i & 1) { mp[MP(i, 0)] = vc[2]; mp[MP(i, 1)] = vc[0]; mp[MP(i, 2)] = vc[3]; mp[MP(i, 3)] = vc[1]; } else { mp[MP(i, 0)] = vc[1]; mp[MP(i, 1)] = vc[3]; mp[MP(i, 2)] = vc[0]; mp[MP(i, 3)] = vc[2]; } continue; } int tt = 0; if(i & 1) { for(int j = 0; j < cnt; j += 2) mp[MP(i, tt++)] = vc[j]; for(int j = 1; j < cnt; j += 2) mp[MP(i, tt++)] = vc[j]; } else { for(int j = 1; j < cnt; j += 2) mp[MP(i, tt++)] = vc[j]; for(int j = 0; j < cnt; j += 2) mp[MP(i, tt++)] = vc[j]; } } for(int i = 0; i < n; ++i) { for(int j = 0; j < m; ++j) printf("%d ", mp[MP(i, j)] + 1); printf("\n"); } }else printf("NO\n"); } return 0; }
相关文章推荐
- Codeforces Round #454 D. Seating of Students
- Educational Codeforces Round 15 E. Analysis of Pathes in Functio(每个点走k步会到达哪个点,经过的边中的最小值是多少,经过的边的权值和)
- Codeforces Round #437 (Div. 2 C. Ordering Pizza 贪心 only two types of pizza
- Educational Codeforces Round 4 D. The Union of k-Segments(★)
- [Educational Codeforces Round 7]F. The Sum of the k-th Powers
- Codeforces Round #371 (Div. 2) A. Meeting of Old Friends (水题)
- Codeforces Round #277 (Div. 2) E. LIS of Sequence
- Codeforces Round #277.5 (Div. 2) D. Unbearable Controversy of Being
- Codeforces Round #399 E Game of Stones 博弈
- Codeforces Round #277.5 (Div. 2) D - Unbearable Controversy of
- Educational Codeforces Round 5 E. Sum of Remainders(数学)
- Educational Codeforces Round 2D. Area of Two Circles' Intersection
- Codeforces Round #377 (Div. 2) B. Cormen — The Best Friend Of a Man
- Educational Codeforces Round 7 F. The Sum of the k-th Powers 拉格朗日插值法
- Codeforces Round #437 (Div. 2 C. Ordering Pizza 贪心 only two types of pizza
- 【Codeforces Round 354 (Div 2)B】【简单模拟】Pyramid of Glasses 漏斗漏水n层t秒灌满多少个
- Educational Codeforces Round 15 B Powers of Two
- Codeforces Round #234 (Div. 2) B. Inna and New Matrix of Candies
- Codeforces Round #428 (Div. 2) B. Game of the Rows (思维)
- Educational Codeforces Round 5-E. Sum of Remainders