sgu 119 解题报告
似乎这题没啥好说的
链接:
题意:
给你a0,b0
要你求出所有的a,b
使得a0x + b0y 是n的倍数的时候, ax + by 一定也是n的倍数(x,y<n)
那么这一题只要把a,b不断翻倍即可....
链接:http://acm.sgu.ru/problem.php?contest=0&problem=119
60行代码...
#include<set> #include<map> #include<list> #include<queue> #include<stack> #include<string> #include<time.h> #include<math.h> #include<memory> #include<vector> #include<bitset> #include<fstream> #include<stdio.h> #include<utility> #include<sstream> #include<string.h> #include<iostream> #include<stdlib.h> #include<algorithm> using namespace std; struct ans { int x; int y; void output() { printf("%d %d\n",x,y); } friend bool operator < (const ans &a,const ans &b) { if (a.x!=b.x) return a.x<b.x; return a.y<b.y; } friend bool operator == (const ans &a,const ans &b) { return ((a.x==b.x)&&(a.y==b.y)); } }; ans a[50005]; int main() { int n; scanf("%d",&n); int x,y; scanf("%d%d",&x,&y); int i; for (i=0;i<n;i++) { a[i].x=x*i%n; a[i].y=y*i%n; } sort(a,a+n); int sum=unique(a,a+n)-a; printf("%d\n",sum); for (i=0;i<sum;i++) { a[i].output(); } return 0; }