扩欧习题

•https://vjudge.net/problem/LightOJ-1306

•http://acm.hdu.edu.cn/showproblem.php?pid=1576
•http://acm.hdu.edu.cn/showproblem.php?pid=5651
•http://www.lightoj.com/volume_showproblem.php?problem=1306
•http://acm.hdu.edu.cn/showproblem.php?pid=2669

HDU 1576

```

要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1)。
Input
数据的第一行是一个T,表示有T组数据。 
每组数据有两个数n(0 <= n < 9973)和B(1 <= B <= 10^9)。
Output
对应每组数据输出(A/B)%9973。
Sample Input
2
1000 53
87 123456789
Sample Output
7922
6060

```

#include<stdio.h>
void exgcd(int a,int b,int &x,int &y) {
	if(!b) x=1, y=0;
	else {
		exgcd(b,a%b,y,x);
		y-=(a/b)*x;
	}
}
int main() {
	int T,a,b,x,y;
	scanf("%d",&T);
	while(T--) {
		scanf("%d%d",&a,&b);
		exgcd(b,9973,x,y);
		printf("%d\n",(1LL*a*x%9973+9973)%9973);
	}
}

HDU 5651

```

众所周知,小新是一个辉煌的编码器。当他只是一个六年级的学生时,他认识到**回文**弦。 

今年夏天,他在腾讯公司工作。有一天,他的领导来了求救喔。他的领导给了他一个字符串,他希望小新为他生成回文字串。一旦小毒素产生不同的回文串,他的领导将给他一个西瓜糖。问题是小妞的领导需要买多少糖果? 
输入
这个问题有多个测试用例。第一行包含一个整数 T T20) Ť(Ť≤20) 这表示测试用例的数量。 
对于每个测试用例,有一行包含字符串 S (1lengħ 小号)1,000) 小号(1≤ñGŤH(小号)1,000)
产量
对于每个测试的情况下,打印的整数这是小欣的领导者需要MOD后买西瓜糖果的数量 1 000 000 007 1,000,000,007 .
样品输入
3
AA
AABB
一个
样品输出
1
2
1
```

#include<stdio.h>
#include<string.h>
#define mod 1000000007
int T,len,cnt[26],vis,f[1010],inv[1010],ans;
char s[1010];
void exgcd(int a,int b,int &x,int &y) {
	if(!b) x=1,y=0;
	else {
		exgcd(b,a%b,y,x);
		y-=(a/b)*x;
	}
}
int getinv(int k) {
	int x,y;
	exgcd(k,mod,x,y);
	return (x%mod+mod)%mod;
}
void setf() {
	f[0]=1;
	for(int i=1;i<=1000;i++) f[i]=1LL*f[i-1]*i%mod;
	inv[1000]=getinv(f[1000]);
	for(int i=999;i>=0;i--) inv[i]=1LL*inv[i+1]*(i+1)%mod;
}
int main() {
	setf();
	scanf("%d",&T);
	while(T--) {
		memset(cnt,0,sizeof cnt);
		vis=0; ans=0;
		scanf("%s",s);
		len=strlen(s);
		for(int i=0;i<len;i++) cnt[s[i]-'a']++;
		for(int i=0;i<26;i++) {
			if(cnt[i]&1) {
				if(vis) {
					puts("0"); goto Next;
				}
				vis=1;
			}
			cnt[i]>>=1;
		}
		ans=f[len>>1];
		for(int i=0;i<26;i++) {
			ans=1LL*ans*inv[cnt[i]]%mod;
		}
		printf("%d\n",ans);
		Next:;
	}
}

```

天空是雪碧。 
鸟在天空飞翔。 
风是美好的 
Blew投掷树木 
树木正在摇摆,叶子落下。 
恋人走过,你也是。 
................................由yifenfei写英文课 

 

女孩聪明聪明。在HDU每个女孩喜欢数学。每个女孩都喜欢解决数学问题! 
现在告诉你两个非负整数a和b。找到非负整数X和整数Y以满足X * a + Y * b = 1。如果没有这样的答案打印“对不起”。 
输入
该输入包含多个测试用例。 
每种情况下两个非负整数a,b(0 <a,b <= 2 ^ 31) 
产量
输出非负整数X和整数Y,如果有比X更小的答案,将选择更多的答案。如果没有答案放在“对不起”。 
样品输入
77 51
10 44
34 79
样品输出
2 -3
抱歉
7 -3
```

#include <cstdio>  
#include <cstring>  
#include <algorithm>  
#include <cmath>  
#include <iostream>  
#include <vector>  
#define ll long long  
using namespace std;  
ll exgcd(ll a, ll b, ll &x, ll &y)  
{  
    if(b==0)  
    {  
        x=1;  
        y=0;  
        return a;  
    }  
    ll r=exgcd(b,a%b,x,y),t;  
    t=x;  
    x=y;  
    y=t-(a/b)*y;  
    return r;  
}  
int main()  
{  
    ll a,b,x,y;  
    while(~scanf("%lld%lld",&a,&b))  
    {  
        ll g=exgcd(a,b,x,y);  
        if(g==1)  
        {  
            printf("%lld %lld\n",(x%b+b)%b,(y%a-a)%a);  
        }  
        else  
            puts("sorry");  
    }  
}  

POJ 1061

```

两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。 
我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。 
Input
输入只包括一行5个整数x,y,m,n,L,其中x≠y < 2000000000,0 < m、n < 2000000000,0 < L < 2100000000。
Output
输出碰面所需要的跳跃次数,如果永远不可能碰面则输出一行"Impossible"
Sample Input
1 2 3 4 5
Sample Output
4
```

#include<stdio.h>
#define LL long long
LL exgcd(LL a,LL b,LL &x,LL &y) {
	if(!b) {x=1; y=0; return a; }
	else {
		LL t=exgcd(b,a%b,y,x);
		y-=(a/b)*x;
		return t;
	}
}
LL x,y,m,n,l;
LL a,b,c;
int main() {
	scanf("%lld%lld%lld%lld%lld",&x,&y,&m,&n,&l);
	a=m-n; b=l; c=y-x;
	LL gcd=exgcd(a,b,x,y);
	if(c%gcd) return puts("Impossible"), 0;
	x*=1LL*c/gcd;
	printf("%lld",(x%b+b)%b);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值