codeforces 939C Convenient For Everybody 简直羞耻
生活随笔
收集整理的這篇文章主要介紹了
codeforces 939C Convenient For Everybody 简直羞耻
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題解
這是一道大水題,然而我卡了1個(gè)半小時(shí)都沒做出來,就是因?yàn)槲腋惴戳藭r(shí)區(qū)的概念,必須掛出來,警示自己!!!
首先明確時(shí)區(qū)的概念,如果一區(qū)為1時(shí)的時(shí)候,i區(qū)的本地時(shí)間為i時(shí)。
好,那么這道題就很容易了,首先得到可用時(shí)間段長度為f-s。
然后我們用固定窗口的方法,固定一個(gè)長度為f-s的窗口,框住一段和最大的子序列,記這段子序列開始的位置為beg。
我們假設(shè)在beg時(shí)區(qū)時(shí)當(dāng)?shù)貢r(shí)間為s時(shí),在1區(qū)的當(dāng)?shù)貢r(shí)間為x。我們有公式:
x+(beg?1)=sx+(beg?1)=s 即 x=s?(beg?1)x=s?(beg?1)
值得注意的是,如果x得到的結(jié)果<1<1<script type="math/tex" id="MathJax-Element-126"><1</script>還要將x+=nx+=n
由于可能存在多個(gè)合理答案,這個(gè)題目要求數(shù)值最小的!
代碼
#include <iostream> #include <cstdio> using namespace std; const int maxn = 1e6+7; int a[maxn],b[maxn]; int n,s,f; int main(){scanf("%d",&n);for(int i = 1;i <= n;++i) scanf("%d",&a[i]);scanf("%d%d",&s,&f);int ans = n;int inter = f - s;int sum = 0,mx = 0,mark = 1;for(int i = 1;i <= inter;++i) sum += a[i];mx = sum;ans = s;for(int beg = 2;beg <=n;++beg){int end = beg+inter-1;end = end > n?end-n:end;sum -= a[beg-1];sum += a[end];int t = beg-1;if(sum > mx){mx = sum;ans = s-t <= 0?s-t+n:s-t;}else if(sum == mx){ans = min(ans,s-t<=0?s-t+n:s-t);}}printf("%d\n",ans);return 0; }總結(jié)
以上是生活随笔為你收集整理的codeforces 939C Convenient For Everybody 简直羞耻的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: codefoces 939E Maxim
- 下一篇: qq号可以申请微信吗