Luogu P9671 [ICPC2022 Jinan R] Identical Parity 题解
P9671 [ICPC2022 Jinan R] Identical Parity
构造题。感觉中上位黄。
对于 为偶数的情况,构造奇偶交替的序列。每次区间向后挪动时,最左边出去的元素和最右边进来的元素奇偶性相同,保证奇偶性不变。这样的序列一定可以构造出来,故 为偶数时直接输出 Yes
。
对于 为奇数的情况,每次区间向后挪动时,为了保证奇偶性不变,必须使最左边出去的元素和最右边进来的元素奇偶性相同。由于每一位都需要这样,所以最后一定是一段长度为 的奇偶序列重复多次。
由于 为奇数,每一段中必然会有一种奇偶性的数多 ,不如假设奇数较多。如果重复了 整段,那么奇数比偶数多 个。在剩余的散段中,为了保证奇偶数的差尽量小,我们要优先使偶数在前,补齐这个差值。
注意,由于我们假定偶数比奇数少,所以偶数数量最多为 的向下取整的一半。如果剩余的散段在补满了偶数之后任然有空位,那么只能在加入奇数。这里需要分类讨论。
由于最开始是排列,所以奇数和偶数的差不能超过 。如果经过以上操作之后可以满足这个条件,输出 Yes
,否则输出 No
。
#include <bits/stdc++.h>
using namespace std;
long long t,n,k;
int main()
{
scanf("%lld",&t);
while(t--)
{
scanf("%lld%lld",&n,&k);
if(k%2==0)printf("Yes\n");
else if(k%2==1)
{
if(n%k<=k/2&&(n/k-n%k)<=1)printf("Yes\n");
else if(n%k>k/2&&(n/k-k/2+(n%k-k/2))<=1)printf("Yes\n");
else printf("No\n");
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探