潜意识conscious

3 篇文章 0 订阅
潜意识(conscious)

【输入格式】
从文件 conscious.in 中读入数据。
本题包含多组数据,第一行一个正整数 T,表示数据组数。接下来依次描述每组数据,对于每组数据:
一行 3 个整数 a,m, sub,分别表示每 1 个丁爷爷币可以买到的 S 数目、东方神秘力量没收 S 的阈值、以及 kblack 潜意识里的数。
【输出格式】
输出到文件 conscious.out 中。
对于每组数据,输出一行 2 个用空格隔开的整数,第一个整数表示 kblack 最终持有的 S 数目,第二个整数表示 kblack 会为此付出的丁爷爷币的数目。
【样例 1 输入】
2

2 4 3

6 21 15


【样例 1 输出】
2 1
15 6


【样例 2】
见选手目录下的 conscious/conscious2.in 与 conscious/conscious2.ans。
【样例 3】
见选手目录下的 conscious/conscious3.in 与 conscious/conscious3.ans。
【提示】
对于东方神秘力量没收 S 这个设定,kblack 形象地把它描述为莫。
【子任务】
对于 10% 的数据,保证 m ≤ 5,T ≤ 10。
对于 20% 的数据,保证 m ≤ 10。
对于 30% 的数据,保证 m ≤ 100,T ≤ 100。
对于另外 10% 的数据,保证 a = 1。
对于 60% 的数据,保证 m ≤ 20,000。
对于另外 20% 的数据,保证 m 为质数。
对于 90% 的数据,保证 T ≤ 10,000。
对于 100% 的数据,保证 2 ≤ m ≤ 10 9 ,1 ≤ a, sub < m,保证 T ≤ 100,000,



我能说我心情不好不想写这道题题解了吗?

真的是无语,满分算法显而易见是exgcd,然而好像觉得写不出来,那就那部分分吧,60+20,对于m为质数的点,用费马小定理可以直接求,可莫名其妙就爆炸了啊啊啊!本蒟蒻无话可说..

代码打得有点暴力,直接看吧qwq



#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#define ll long long
using namespace std;
int T,a,m,sub;ll ans1,ans2,k,k1,x,y;
ll exgcd(ll a,ll b,ll &x,ll &y){
	if(!b){
		x=1;y=0;
		return a;
	}
	ll d=exgcd(b,a%b,x,y);
	ll t=x;x=y;
	y=t-a/b*y;
	return d;
}
int main()
{
	freopen("conscious.in","r",stdin);
	freopen("conscious.out","w",stdout);
	scanf("%d",&T);
	while(T--){
		scanf("%d%d%d",&a,&m,&sub);
		ll d=exgcd(a,m,x,y);
		ll l=sub%d;
		m/=d;
		if((sub/d+1>=m) || l+l<d){
			k=sub/d;
			ans1=k*d;
			ans2=((x*k)%m+m)%m;
		}else if(l+l>d){
			k=sub/d+1;
			ans1=k*d;
			ans2=((x*k)%m+m)%m;
		}else{
			k=sub/d;
			k1=sub/d+1;
			if(x*k%m > x*k1%m){
				ans1=k1*d;
				ans2=((x*k1)%m+m)%m;
			}else{
				ans1=k*d;
				ans2=((x*k)%m+m)%m;
			}
		}
		if((ans1-sub)>=sub){
			ans1=0;ans2=0;
		}
		printf("%lld %lld\n",ans1,ans2);
	}
	return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值