POJ 3668 分数保存斜率
2014-03-18 10:45
106 查看
一开始的时候直接用 double 来保存斜率,真是 too young too simple .. always naive
2000*2000的数组开不下,只好优化下内存,好在hash这个东西存的时候每个只需要1 bit ,一个int就能装32bit拉。
最后 斜率为0和斜率为 无穷大要特判一下。
2000*2000的数组开不下,只好优化下内存,好在hash这个东西存的时候每个只需要1 bit ,一个int就能装32bit拉。
最后 斜率为0和斜率为 无穷大要特判一下。
#include <stdio.h> #include <iostream> #include <queue> #include <algorithm> #include <map> #include <vector> #include <cmath> #include <string.h> #include <stdlib.h> #include <time.h> #include <fstream> #include <set> #include <stack> using namespace std; #define READ freopen("acm.in","r",stdin) #define WRITE freopen("acm.out","w",stdout) #define ll long long #define ull unsigned long long #define PII pair<int,int> #define PDI pair<double,int> #define PDD pair<double,double> #define MII map<int,int>::iterator #define fst first #define sec second #define MS(x,d) memset(x,d,sizeof(x)) #define INF 0x3f3f3f3f #define ALL(x) x.begin(),x.end() #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define ROOT 0,n-1,1 #define PB push_back #define FOR(a,b,c) for(int a=b;a<c;a++) #define MOD 1000000007 #define keyTree (ch[ ch[root][1] ][0]) #define MAX 200000 int n; int x[500],y[500]; int hash[2][2100][2100/32]; void setbit(int x,int y,int pos) { hash[pos][x][y/32]|=(1<<(y%32)); } bool getbit(int x,int y,int pos) { return hash[pos][x][y/32]&(1<<(y%32)); } int main() { //READ; while(cin>>n) { MS(hash,0); for(int i=0;i<n;i++) scanf("%d%d",&x[i],&y[i]); int ans=0; int flag=0; for(int i=0;i<n;i++) for(int j=i+1;j<n;j++) { if(x[j]==x[i]) flag|=1; else if(y[j]==y[i]) flag|=2; else { int dx=x[j]-x[i]; int dy=y[j]-y[i]; int pos=dy*dx>0?1:0; dx=dx>0?dx:-dx; dy=dy>0?dy:-dy; int g=__gcd(dx,dy); dx/=g,dy/=g; if(!getbit(dx,dy,pos)) { ans++; setbit(dx,dy,pos); } } } if(flag>0&&flag<3) ans++; else if(flag==3) ans+=2; cout<<ans<<endl; } return 0; }
相关文章推荐
- Android 使用【AIDL】调用外部服务
- DevExpress之ASPxGridView笔记(1)
- 【javascript每日一练】- 无序数组排序
- 同wifi环境下android设备自动获取socket服务端的ip地址和端口号的方法-UDP广播
- (转)OPENCV 函数cvCreateMat
- SQLServer中的数据库备份恢复并重命名
- Mysql Explain 详解
- SSD1289驱动讲解
- myeclipse中将整块的代码所选中的代码左右移动的快捷键
- Codeforces Round #236 (Div. 2) D. Upgrading Array
- android style小结
- Kill Processes in Linux
- startActivityForResult
- (转)Java NIO框架Mina、Netty、Grizzly介绍与对比
- iframe布局 详细用法 及缺点
- 关于Java中split方法对空字符串处理问题
- Spring mvc (四)
- gem rails安装、卸载、和使用 指定版本
- poj 3320 Jessica's Reading Problem
- CF round 236 div1