2022 ICPC 济南 E Identical Parity (扩欧)

这篇具有很好参考价值的文章主要介绍了2022 ICPC 济南 E Identical Parity (扩欧)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

2022 ICPC 济南 E. Identical Parity (扩欧)

Problem - E - Codeforces

大意:给出一个 n 和一个 k , 问是否能构造一个长 n 的排列使得所有长 k 的连续子序列和的奇偶性相同。

思路:通过分析可知 , 任两个间隔 k - 1 的元素奇偶性必然相同 , 这样的话 , 问题就转化成了

( n   %   k  )个( ⌊ n k ⌋ + 1 )和( k − n   %   k )个( ⌊ n k ⌋ )是否能组成( ⌊ n 2 ⌋ )和( n − ⌊ n 2 ⌋ )的问题 (n ~\% ~k ~)个(\left \lfloor \frac{n}{k} \right \rfloor +1)和(k-n~\%~k)个(\left \lfloor \frac{n}{k} \right \rfloor)是否能组成(\left \lfloor \frac{n}{2} \right \rfloor)和(n - \left \lfloor \frac{n}{2} \right \rfloor)的问题 n % k )个(kn+1)和(kn % k)个(kn)是否能组成(2n)和(n2n)的问题

很自然的就可以想到 01 背包去解决这个问题 , 但是显然 n 和 k 的范围太大了 , 无法使用 01 背包去解决这个问题。 于是转化问题 , 考虑现有范围的 x 和 y 是否能满足以下式子。

( ⌊ n k ⌋ + 1 ) ∗ x   +  ( ⌊ n k ⌋ ) ∗ y = ( ⌊ n 2 ⌋ ) (\left \lfloor \frac{n}{k} \right \rfloor +1)*x~+~(\left \lfloor \frac{n}{k} \right \rfloor)*y = (\left \lfloor \frac{n}{2} \right \rfloor) kn+1x + kny=2n

带入扩欧得到通解:

x = x 0 ∗ c g c d ( a , b ) + k ∗ b g c d ( a , b ) x=x_0*{c\over gcd(a,b)}+{k*b\over gcd(a,b)} x=x0gcd(a,b)c+gcd(a,b)kb

y = y 0 ∗ c g c d ( a , b ) − k ∗ a g c d ( a , b ) y=y_0*{c\over gcd(a,b)}-{k*a\over gcd(a,b)} y=y0gcd(a,b)cgcd(a,b)ka文章来源地址https://www.toymoban.com/news/detail-688807.html

根据已有的 x 的范围 和 y 的范围分别求出两个 k 的范围 , 判断这两个区间是否相交即可。

易错点:是否可以通过 x 的范围求出对应 k 的范围然后带入求 y 的范围 ?显然是可以的 , 但是这样求出的 y 的范围区间是不连续的 , 也就不能判交。

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define int long long
const int N = 2e6 + 10;
const int mod = 1e9 + 7;
typedef pair<int,int>PII;

int n , t , k;

int exgcd(int a , int b , int &x , int &y){
	
	if(b == 0){ x = 1; y = 0; return a;}
	int g = exgcd(b , a % b , y , x);
	y -= a / b * x;
	return g;
}



signed main(){

	IOS
	cin >> t;
	
	while(t --){
		cin >> n >> k;
		
		if(n % k == 0){
			int num = n / k , od , ev;
		    ev = n / 2;
		    od = n - ev;
			if(ev % num == 0 && od % num == 0){
				cout << "Yes" << "\n";
			}else{
				cout << "No" << "\n";
			}
		}else{
			int a = n / k , b = n / k + 1 , c = n / 2;
			int cntb = n % k , cnta = k - n % k;

			int x , y , gcds;
			gcds = exgcd(a , b , x , y);
			a /= gcds;b /= gcds;c /= gcds;
			
			int k1_max = floor(1.0L * (cnta - x * c) / (1.0L * b));
			int k1_min = ceil(1.0L * (0 - x * c) / (1.0L * b));
			int k2_max = floor(1.0L * (y * c) / (1.0L * a));
			int k2_min = ceil(1.0L * (y * c - cntb) / (1.0L * a));  
			
			if(k1_min > k1_max || k2_min > k2_max){
				cout << "No\n";
			}else{
				if(min(k2_max , k1_max) >= max(k1_min , k2_min)){
					cout << "Yes\n";
				}else{
					cout << "No\n";
				}
			}
		}
		
	}



	return 0;
}
//freopen("文件名.in","r",stdin);
//freopen("文件名.out","w",stdout);

到了这里,关于2022 ICPC 济南 E Identical Parity (扩欧)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 训练记录番外篇(2):2022 ICPC Gran Premio de Mexico 2da Fecha

    2022.10.3 之前训得ak场,个人认为很edu。 (顺便一提,可能这个训练记录番外系列的比赛都非常edu,十分建议铜银选手单挑) 题意比较晦涩难懂,但是读完发现是个toposort。 发现能够成为答案的点非常少,爆搜出所有可以成为答案的点然后直接二分即可。 小模拟题,锻炼码力

    2023年04月08日
    浏览(30)
  • 算法竞赛ICPC、CCPC、NIO、蓝桥杯、天梯赛

    🎁🎁🎁 本文章将进行超链接,建议大家收藏,在接下来的一年时间,本文章基本可以完成更新,请大家耐心等待 ~~ ⭐️ 本博客深入解析与算法竞赛相关的数据结构、算法、代码。包括基础数据结构、基本算法、搜索、高级数据结构、动态规划、数论和线性代数、组合数学

    2024年02月11日
    浏览(79)
  • MinIO-设置数据校验分片数量(parity shard)

    设置奇偶校验值,是为了可用性和总可用存储量之间的平衡。较高的奇偶校验值以可用存储为代价提高了驱动器或节点故障的恢复能力;较低的奇偶校验值提供了最大限度的存储,同时降低了对驱动器或节点故障时的容忍度。 下表列出了由 1 个节点和 16 个 1TB 驱动器组成的

    2024年02月06日
    浏览(31)
  • 对话 Parity | 共建波卡生态,开发者和创业团队的机会来了

    波卡的强势发展和良好生态一直是众多开发者的理想选择。为了能更好地了解波卡生态的最新情况和有哪些适合开发者的机会,我们邀请到了Parity亚太地区负责人Helena进行了一次深度专访。 专访中详细分享了波卡上的最新进展和生态情况,同时介绍了 Subtrate 传播天使项目和

    2023年04月14日
    浏览(28)
  • CF Round 821 (Div. 2)--C. Parity Shuffle Sorting

    You are given an array a with n non-negative integers. You can apply the following operation on it. Choose two indices l and r (1≤lr≤n). If al+ar is odd, do ar:=al. If al+ar is even, do al:=ar. Find any sequence of at most n operations that makes a non-decreasing. It can be proven that it is always possible. Note that you do not have to mi

    2024年02月11日
    浏览(28)
  • 2020ICPC南京站

    K Co-prime Permutation 题意:给定n和k,让你构造n的排列,满足gcd(pi, i)=1的个数为k。 思路:因为x和x-1互质,1和任何数互质,任何数和它本身不互质 当k为奇数时,p1=1,后面k-1个数两两互换 当k为偶数时,后面k个数两两互换 Let\\\'s Play Curling 题意:给定n块红色石头,m块蓝色石头的位

    2024年02月10日
    浏览(29)
  • 2023ICPC西安邀请赛

    更好的阅读体验:传送门 比赛完由于被旅游、赶ddl、上班等等各种事情影响,导致我现在才有时间可以写写小作文,这中间隔得时间有点长了,已经不知道从哪开始说起了,灵感也都流失了… 比赛前一个周,我的队友djk,也是我的舍友,周一从合肥回来,嗓子的声音严重变

    2024年02月05日
    浏览(31)
  • sakuya726's 2023 ICPC China SiChuan Provincial Programming Contest(ICPC2023四川省赛)游记随笔

    出发前一天,收拾东西做好准备工作。打印了自己记忆中所有高级数据结构的板子(然而实际上并没有卵用),VP一把往年的四川省赛。 不出意外的失眠了,早上九点四十的火车,凌晨五点才睡觉。七点半出发去火车站,天还下着雨,刚开始感觉还挺有意境,然后当我在雨中

    2024年02月07日
    浏览(51)
  • 2020ICPC南京【个人题解EFHKLM】

    首先如果炸弹在(0,0)或者机器人最终停在炸弹处,那么一定Impossible。 对于其他的情况,如果存在一条路径使得机器人可以不经过炸弹,那么一定存在一种方案,使得相同的方向在这个方案种是连在一起的。 于是可以直接枚举所有方向的排列,共4!个,判断每一种排列能否绕过

    2023年04月09日
    浏览(40)
  • XTU-OJ 1170-ICPC

    题目描述 ACM/ICPC比赛涉及的知识点非常多,一个队伍三个人需要能够互补。一个队伍某个知识点的高度是三个人中水平最高的那个人决定。现在给你三个人的每个知识点的水平情况,请计算一下这个队伍的水平。 输入 存在多个样例。每个样例的第一行是一个整数N(3≤N≤100

    2024年02月08日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包