wap免费,营口网站优化,江苏做网站公司排名,泸州设计公司有哪些正题
题目链接:https://www.luogu.com.cn/problem/CF1594F 题目大意
给出n,s,kn,s,kn,s,k#xff0c;求是否所有的长度为nnn且和为sss的正整数序列都有一段和为kkk的区间。 1≤T≤105,1≤n,s,k≤10181\leq T\leq 10^5,1\leq n,s,k\leq 10^{18}1≤T≤105,1≤n,s,k≤1018 解题…正题
题目链接:https://www.luogu.com.cn/problem/CF1594F 题目大意
给出n,s,kn,s,kn,s,k求是否所有的长度为nnn且和为sss的正整数序列都有一段和为kkk的区间。
1≤T≤105,1≤n,s,k≤10181\leq T\leq 10^5,1\leq n,s,k\leq 10^{18}1≤T≤105,1≤n,s,k≤1018 解题思路
可以考虑构造一个序列使得没有和为kkk的区间。
要求使得没有两个前缀和差值为kkk构造时显然前面的越小越好因为如果前面的增大给后面的减小那么还不如直接让前面的减小当我们在前缀和中填入1∼k−11\sim k-11∼k−1之后我们下一个由于(0∼k−1)k(0\sim k-1)k(0∼k−1)k都给封锁住了所以我们只能填2k2k2k然后可以继续往后填2k∼3k−12k\sim 3k-12k∼3k−1发现每隔kkk个就要加k1k1k1。
也就是我们构造的序列是形如1,1,1,1,...k1,1,1,1,...k1,1,1,11,1,1,1,...k1,1,1,1,...k1,1,1,11,1,1,1,...k1,1,1,1,...k1,1,1,1形式的计算出前nnn个的最小和就好了。
然后交上去发现WA了后来想了想当nknknk时由于没有填上关键格所以需要特殊考虑如果sksksk时显然是无解的否则nknknk时填n−1n-1n−1个111然后填s−n1s-n1s−n1即可。 code
#includecstdio
#includecstring
#includealgorithm
#define ll long long
using namespace std;
ll T,s,n,k;
signed main()
{scanf(%lld,T);while(T--){scanf(%lld%lld%lld,s,n,k);if(nk){if(sk)puts(YES);else puts(NO);continue;}ll wn/k*2ll*kn%k;if(sw)puts(YES);else puts(NO);}return 0;
}