CF1594F-Ideal Farm【构造】
正題
題目鏈接:https://www.luogu.com.cn/problem/CF1594F
題目大意
給出n,s,kn,s,kn,s,k,求是否所有的長度為nnn且和為sss的正整數(shù)序列都有一段和為kkk的區(qū)間。
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
解題思路
可以考慮構(gòu)造一個(gè)序列使得沒有和為kkk的區(qū)間。
要求使得沒有兩個(gè)前綴和差值為kkk,構(gòu)造時(shí)顯然前面的越小越好,因?yàn)槿绻懊娴脑龃蠼o后面的減小那么還不如直接讓前面的減小,當(dāng)我們在前綴和中填入1~k?11\sim k-11~k?1之后我們下一個(gè)由于(0~k?1)+k(0\sim k-1)+k(0~k?1)+k都給封鎖住了所以我們只能填2k2k2k,然后可以繼續(xù)往后填2k~3k?12k\sim 3k-12k~3k?1,發(fā)現(xiàn)每隔kkk個(gè)就要加k+1k+1k+1。
也就是我們構(gòu)造的序列是形如:1,1,1,1,...k+1,1,1,1,...k+1,1,1,11,1,1,1,...k+1,1,1,1,...k+1,1,1,11,1,1,1,...k+1,1,1,1,...k+1,1,1,1形式的,計(jì)算出前nnn個(gè)的最小和就好了。
然后交上去發(fā)現(xiàn)WA了,后來想了想當(dāng)n<kn<kn<k時(shí)由于沒有填上關(guān)鍵格所以需要特殊考慮,如果s=ks=ks=k時(shí)顯然是無解的,否則n<kn<kn<k時(shí)填n?1n-1n?1個(gè)111然后填s?n+1s-n+1s?n+1即可。
code
#include<cstdio> #include<cstring> #include<algorithm> #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(n<k){if(s==k)puts("YES");else puts("NO");continue;}ll w=n/k*2ll*k+n%k;if(s<w)puts("YES");else puts("NO");}return 0; }總結(jié)
以上是生活随笔為你收集整理的CF1594F-Ideal Farm【构造】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 四字qq昵称 甜美可爱的四字网名
- 下一篇: 2021牛客OI赛前集训营-交替【生成函