uva 10167 - Birthday Cake

来源:互联网 发布:mac上用什么输入法 编辑:程序博客网 时间:2024/06/05 11:23

省赛在即,只能挑实用的练了,图论交给我的小伙伴了,所以我来搞一搞暴力回溯奋斗

这个是暴力入门题,我还WA了。。。

题目给出一个圆圆内包含很多的点,让你找到一条直线AX+BY=0使得直线两边分布的点个数相同

直接枚举,其实可以加一个gcd(A,B)仅当A,B最大公约数为1时才继续计算

但是看了下数据量,应该不会超时,另外加上了也省不了多少时间

这道题之所以WA就是因为漏掉了A B不能同时为0的情况

代码如下:

#include <cstdio>#include <string>#include <iostream>#include <algorithm>#define MAXN 10010#define ll long longusing namespace std;int x[MAXN];int y[MAXN];int main(void) {    int n;    while(scanf("%d", &n), n) {        n *= 2;        for(int i=0; i<n; ++i) {            scanf("%d%d", &x[i], &y[i]);        }        int a, b, t;        int count1 = 0;        int count2 = 0;        int flag = 0;        for(a=-500; a<=500; ++a) {            for(b=-500; b<=500; ++b) {                if(a==0 && b==0)                    continue;                count1 = 0;                count2 = 0;                for(int i=0; i<n; ++i) {                    t = a*x[i]+b*y[i];                    if(t < 0)                        count1++;                    else if(t > 0)                        count2++;                    else {                        count1 = count2+1;                        break;                    }                }                if(count1 == count2) {                    flag = 1;                    break;                }            }            if(flag == 1)                break;        }        printf("%d %d\n", a, b);             }}


0 0
原创粉丝点击