absi2011's Blog & Daily Life.

全新的开始       我要省选翻盘       I wanna AK in 高考\化学       自此,生无可恋
100722 B 解题报告
CF 100735 F 解题报告

sgu 119 解题报告

absi2011 posted @ Dec 12, 2015 11:48:31 PM in 刷题记录 with tags sgu 数学题 , 619 阅读

似乎这题没啥好说的

链接:

题意:

给你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;
}

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter