Panasonic Programming Contest (AtCoder Beginner Contest 186) E.Throne (数学,线性同余方程)

- 题意:有围着一圈的\(N\)把椅子,其中有一个是冠位,你在离冠位顺时针\(S\)把椅子的位置,你每次可以顺时针走\(K\)个椅子,问最少要走多少次才能登上冠位,或者走不到冠位.
 - 题解:这题和洛谷那个青蛙的约会简直一模一样啊,我们可以把圆看成是一条直线,我每次都向前都\(k\)步,多出\(N\)的部分我们可以对\(N\)取模,直到走到目标点.假设我们要走\(x\)次,那么\(Kx\equiv\ (N-S)\ mod\ N\),接下来就是线性同余方程求最小正整数解的板子了,关于线性同余方程的求解可以看我的上一篇博客,里面有详细的说明:
https://www.cnblogs.com/lr599909928/p/14163525.html - 代码:
 
#include <bits/stdc++.h>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define me memset
#define rep(a,b,c) for(int a=b;a<=c;++a)
#define per(a,b,c) for(int a=b;a>=c;--a)
const int N = 1e6 + 10;
const int mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
using namespace std;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL;
ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b) {return a/gcd(a,b)*b;}
#define int long long
int t;
int n,s,k;
int exgcd(int a,int b,int &x1,int &y1){
	int x2,y2;
	if(b==0){
		x1=1,y1=0;
		return a;
	}
	int d=exgcd(b,a%b,x2,y2);
	x1=y2,y1=x2-a/b*y2;
	return d;
}
signed main() {
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	cin>>t;
	while(t--){
		int x1,y1;
		cin>>n>>s>>k;
		int d=exgcd(k,n,x1,y1);
		if(s%d) {cout<<-1<<'\n';continue;}
		s/=d,n/=d;
		x1*=-s;
		if(x1>=0) cout<<x1%n<<'\n';
		else cout<<(x1%n+n)%n<<'\n';
	}
    return 0;
}
												
											Panasonic Programming Contest (AtCoder Beginner Contest 186) E.Throne (数学,线性同余方程)的更多相关文章
- AtCoder Beginner Contest 068 ABCD题
		
A - ABCxxx Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement This contes ...
 - KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解
		
KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200) 题解 哦淦我已经菜到被ABC吊打了. A - Century 首先把当前年 ...
 - atcoder beginner contest 251(D-E)
		
Tasks - Panasonic Programming Contest 2022(AtCoder Beginner Contest 251)\ D - At Most 3 (Contestant ...
 - AtCoder Beginner Contest 076
		
A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...
 - AtCoder Beginner Contest 184 题解
		
AtCoder Beginner Contest 184 题解 目录 AtCoder Beginner Contest 184 题解 A - Determinant B - Quizzes C - S ...
 - AtCoder Beginner Contest 255(E-F)
		
Aising Programming Contest 2022(AtCoder Beginner Contest 255) - AtCoder E - Lucky Numbers 题意: 给两个数组a ...
 - AtCoder Beginner Contest 100 2018/06/16
		
A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...
 - AtCoder Beginner Contest 052
		
没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...
 - AtCoder Beginner Contest 053 ABCD题
		
A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...
 
随机推荐
- 断言封装整合到requests封装中应用(纠错False,Result循环,tag测试)
			
检查json_key_value: 检查: requests.py # -*- coding: utf-8 -*-#@File :demo_04.py#@Auth : wwd#@Time : 2020 ...
 - 最新详解android自动化无障碍服务accessibilityservice以及高版本问题_1_如何开启获得无障碍
			
前言 无障碍服务accessibilityservice是什么 简单来说 无障碍服务就是一个为残障人士 尤其是视觉障碍人士提供的一个帮助服务.具体就是可以识别控件 文字 可以配合语音助手 操作和 使用 ...
 - kubernets之configMap和secret
			
一 如何有效且更好的将配置写到pod的容器中 考虑一个问题,就是在传统的应用中,程序里面需要的配置一般以配置文件的形式或者shell脚本里面的参数是在执行的时候在命令行里面进行添加,但是在kuber ...
 - Cloudera Manager添加主机节点
			
为了监控方便,想把研发环境中的主机节点都纳入Cloudera Manager的管理中,这样在遇到问题时可方便的查看主机的硬件资源情况. 添加主机节点有多种方式,由于我是离线工作,所以选择rpm包的方式 ...
 - Ubuntu下修改缺省dash shell为bash shell
			
Debian和Ubuntu下缺省使用的是shell是dash,而不是bash.从/bin/sh软连接的指向可以看出这点. 这是一个不同于bash的shell,它主要是为了执行脚本而出现,而不是交互,它 ...
 - 【葵花宝典】All-in-One模式安装KubeSphere
			
1.准备 Linux 机器 2.google api受限下载 KubeKey export KKZONE=cn curl -sfL https://get-kk.kubesphere.io | VER ...
 - 解决安装mysql动态库libstdc++.so.6、libc.so.6版本过低问题
			
初始化mysql报错: ./bin/mysqld: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ...
 - 琐碎的想法(三)对Java的批评的看法
			
编写本文的目的 在大环境下,Java是一个饱受争议的语言,一方面在工程上它的流行程度非常高:另一方面,越是资深的软件工程师就越容易对这个语言感到不满. 在这种情况下,博主希望每一个Java程序员能够耐 ...
 - hive 时间相关的函数
			
yyyy-MM-dd与yyyyMMdd000000转换的三种方法 方法一:date_format(只支持yyyy-MM-dd -> yyyyMMdd000000) select date_for ...
 - JavaScript代码是怎么执行的?
			
前言 众所周知,JavaScript是单线程语言.所以JavaScript是按顺序执行的! 先编译再执行 变量提升 请看下面的例子: console.log(cat) catName("Ch ...