【UVa10167】 Birthday Cake,思路+代码+解题报告
来源:互联网 发布:tiva数据库 编辑:程序博客网 时间:2024/06/05 16:05
#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>// #define INPUT/** Problem: UVA10167 - Birthday Cake Begin Time:22nd/Mar/2012 5:00 p.m. End Time: 22nd/Mar/2012 7:35 p.m. Last Time: 2H 35M Thought: 就是根据题目中给的条件搜索 1.A,B∈[-500,500] 2.至少有一个解,输出其中之一就可以了 Experience: 这么简单的一道题,竟然WA了10次+,究其原因,就是审题不细 + 搜索功底不行 1.由于审题不细,有2n lines follow没看到,导致输入的时候只输入了N行,WAWAWA 2.由于审题不细,没看到给出了答案的范围,从而想得有些复杂,WAWAWA 3.搜索的时候一定要注意!!先搜索再判断解,在这道题里是这样的 如果你把判断解先放在前面,那么可能搜索到了下一个状态,但是你的解停留在 上一个状态,这时候你输出的i,j是现在的状态而不是上一个状态,导致WA,这个 问题是WA的最多次的,日日日。 Knowledge Point: 单纯的搜索,甚至归类不能归成BFS/DFS。*/using namespace std;const int MAX_CHERRY = 110000;struct node{ int x; int y;};node cherry[MAX_CHERRY];void Solve(const int num){ int moreThan = 0; int lessThan = 0; for(int i = -500 ; i <= 500 ; i++) { for(int j = -500 ; j <= 500 ; j++) { moreThan = 0; lessThan = 0; for(int k = 0 ; k < num ; k++) { if(cherry[k].x * i + cherry[k].y * j > 0) { moreThan++; } if(cherry[k].x * i + cherry[k].y * j < 0 ) { lessThan++; } if(cherry[k].x * i + cherry[k].y * j == 0) { break; } if(moreThan == lessThan && moreThan + lessThan == num) { printf("%d %d\n",i,j); return; } } } }}int main(){#ifdef INPUT freopen("b:\\acm\\uva\\UVA10167\\input.txt","r",stdin);#endif int n; int x,y,num; while (scanf("%d",&n) != EOF ) { if ( n == 0 ) break; x = 0 ; y = 0 ; num = 0; for(int i = 0 ; i < 2 * n ; i++) { scanf("%d %d",&cherry[i].x,&cherry[i].y); } Solve(2*n); } return 0;}