NYIST格点
来源:互联网 发布:linux查询cpu个数 编辑:程序博客网 时间:2024/06/09 22:55
看到这道题我的第一想法就是一一列举判断从第一个点到第二个之间的点是不是在这条直线上并且都是整数点。
方法一:
判断这些点是不是整点的办法,y=(y2-y1)*(x-x1)/(x2-x1)+y1;如果(y2-y1)*(x-x1)/(x2-x1)为整数,则Y为整数。判断它是否为整数即(y2-y1)*(x-x1)%(x2-x1)==0.
下面是AC的代码:
#include<cstdio>int main(){ int cas,x1,y1,x2,y2,ans,i; scanf("%d",&cas); while(cas--) { scanf("%d%d%d%d",&x1,&y1,&x2,&y2); if(x1==y1&&y1==x2&&x2==y2) { printf("(%d,%d),(%d,%d)\n",x1,y1,x2,y2); } else if(x1==x2) { for(i=y1;i!=y2;y1>y2?i--:i++) printf("(%d,%d),",x1,i); printf("(%d,%d)\n",x2,y2); } else if(y1==y2) { for(i=x1;i!=x2;x1>x2?i--:i++) printf("(%d,%d),",i,y1); printf("(%d,%d)\n",x2,y2); } else { printf("(%d,%d),",x1,y1); if(x1>x2) { for(i=x1-1;i>x2;i--) { if((long long)(i-x1)*(y2-y1)%(x2-x1)==0) { ans=(long long)(i-x1)*(y2-y1)/(x2-x1)+y1; printf("(%d,%d),",i,ans); } } } else { for(i=x1+1;i<x2;i++) { if((long long)(i-x1)*(y2-y1)%(x2-x1)==0) { ans=(long long)(i-x1)*(y2-y1)/(x2-x1)+y1; printf("(%d,%d),",i,ans); } } } printf("(%d,%d)\n",x2,y2); } } return 0;}
方法二:
这个规律是看了解题报告之后才AC的。
可以发现两个端点之间的个点数就是gcd(abs(x1-x2),abs(y1-y2))-1.
#include<cstdio>int gcd(int a,int b){ if(b==0) return a; else return gcd(b,a%b);}int abs(int m){ if(m>0) return m; else return -m;}int main(){ int num,x1,y1,x2,y2,dx,dy,cas; scanf("%d",&cas); while(cas--) { scanf("%d%d%d%d",&x1,&y1,&x2,&y2); num=gcd(abs(x2-x1),abs(y2-y1)); dx=(x2-x1)/num; dy=(y2-y1)/num; printf("(%d,%d)",x1,y1); while(x1!=x2||y1!=y2) { x1+=dx; y1+=dy; printf(",(%d,%d)",x1,y1); } printf("\n"); } return 0;}
- NYIST格点
- nyist 891 找点
- nyist 三点顺序
- nyist 891 找点
- nyist
- 最小点覆盖集&&http://acm.nyist.net/JudgeOnline/problem.php?pid=237
- nyist-673
- nyist-94
- nyist-676
- nyist-663
- nyist-34
- nyist-33
- nyist-480
- nyist-527
- nyist-79
- nyist-23
- nyist-205
- nyist-96
- VS2010编译错误:fatal error C1189: #error : This file requires _WIN32_WINNT to be #defined at least to 0x
- [Academia] 学术文章数据库及搜索引擎
- 请谨慎使用HTML的条件注释!
- 二叉树中增加next指针 Populating Next Right Pointers in Each Node
- NYOJ-312-20岁生日-2013年08月17日08:42:42
- NYIST格点
- Oracle 11gR2 RAC LoadBalancing and TAF
- ListView小知识整理:滑动背景、Item间隙等
- 《hadoop权威指南》学习笔记-hadoop I/O之Avro
- Android中Audio框架
- 《告白人间》
- 几个Linux函数(很久的整理了,从自己的新浪博客搬来)
- 错误:‘strcpy’在此作用域中尚未声明
- 读“一个 很高兴见到你“有感文章推荐