The Happy Worm(poj1974)
来源:互联网 发布:雷电osoppo系统优化 编辑:程序博客网 时间:2024/04/30 09:56
The Happy Worm
Time Limit: 5000MS Memory Limit: 131072K
Description
The Happy Worm lives in an m*n rectangular field. There are k stones placed in certain locations of the field. (Each square of the field is either empty, or contains a stone.) Whenever the worm sleeps, it lies either horizontally or vertically, and stretches so that its length increases as much as possible. The worm will not go in a square with a stone or out of the field. The happy worm can not be shorter than 2 squares.
The question you are to answer is how many different positions this worm could be in while sleeping.
The question you are to answer is how many different positions this worm could be in while sleeping.
Input
The first line of the input contains a single integer t (1 <= t <= 11), the number of test cases, followed by the input data for each test case. The first line of each test case contains three integers m, n, and k (1 <= m,n,k <= 131072). The input for this test case will be followed by k lines. Each line contains two integers which specify the row and column of a stone. No stone will be given twice.
Output
There should be one line per test case containing the number of positions the happy worm can be in.
Sample Input
15 5 61 52 32 44 2 4 35 1
Sample Output
9
#include<cstdio>#include<cstdlib>struct Lattice{int x, y;}la[200000];int cmpx(const void* c, const void* d){Lattice* a = (Lattice*)c;Lattice* b = (Lattice*)d;if (a->x == b->x) return a->y - b->y;else return a->x - b->x;}int cmpy(const void* c, const void* d){Lattice* a = (Lattice*)c;Lattice* b = (Lattice*)d;if (a->y == b->y) return a->x - b->x;else return a->y - b->y;}int main(){int T;scanf("%d", &T);while(T--){int m, n , k;scanf("%d%d%d", &m, &n, &k);for (int i = 0; i < k; ++i)scanf("%d%d", &la[i].x, &la[i].y);int po = 0;if (k == 0) po = m + n;else{qsort(la, k, sizeof(Lattice), cmpx);po += la[0].x - 1;if (la[0].y > 2) ++po;for (int i = 0; i < k - 1; ++i)if (la[i].x == la[i+1].x){if (la[i].y + 2 < la[i+1].y) ++po;}else{po += la[i+1].x - la[i].x - 1;if (la[i].y + 1 < n) ++po;if (la[i+1].y > 2) ++po;}if (la[k-1].y + 1 < n) ++po;po += m - la[k-1].x;qsort(la, k, sizeof(Lattice), cmpy);po += la[0].y - 1;if (la[0].x > 2) ++po;for (int i = 0; i < k - 1; ++i)if (la[i].y == la[i+1].y ){if (la[i].x + 2 < la[i+1].x) ++po;}else{po += la[i+1].y - la[i].y - 1;if (la[i].x + 1 < m) ++po;if (la[i+1].x > 2) ++po;}if (la[k-1].x + 1 < m) ++po;po += n - la[k-1].y;}printf("%d\n", po);}return 0;}
0 0
- The Happy Worm(poj1974)
- FOJ1176 The Happy Worm
- The Happy Worm
- poj 1974 The Happy Worm
- FOJ 1176 The Happy Worm
- ACM:The Happy Worm (C++ 实现)
- POJ 1974 The Happy Worm 笔记
- Poj 1974 The Happy Worm(sort结构体二级排序)
- zoj1056 The Worm Turns
- The Worm Turns
- 1056The Worm Turns
- ZOJ1056 The Worm Turns
- The Worm Turns
- The Worm Turns
- ZOJ1056 The Worm Turns
- THE WORM TURNS
- ZOJ-1056-The Worm Turns
- fjnu 1823 The Worm Turns
- 一道有趣的算法题:仿照Excel的列编号,给定一个数字,输出该列编号字符串
- hdu_1407测试你是否和LTC水平一样高
- Unable to resolve target 'android-XXXXX'
- javascript 异步调用 后台.cs里的方法 PageMethods如何使用
- NYOJ327 亲和串 【KMP】
- The Happy Worm(poj1974)
- matplotlib 安装方法
- poj1598
- 新手入门如何选择linux版本
- 人生观
- memset用法详解
- treeView和递归的简单运用
- 防止恶意登录机制
- Android中将布局文件/View添加至窗口过程分析 ---- 从setContentView()谈起