codeforces 939C Convenient For Everybody 简直羞耻
2018-02-18 17:48
204 查看
题解
这是一道大水题,然而我卡了1个半小时都没做出来,就是因为我搞反了时区的概念,必须挂出来,警示自己!!!首先明确时区的概念,如果一区为1时的时候,i区的本地时间为i时。
好,那么这道题就很容易了,首先得到可用时间段长度为f-s。
然后我们用固定窗口的方法,固定一个长度为f-s的窗口,框住一段和最大的子序列,记这段子序列开始的位置为beg。
我们假设在beg时区时当地时间为s时,在1区的当地时间为x。我们有公式:
x+(beg−1)=sx+(beg−1)=s 即 x=s−(beg−1)x=s−(beg−1)
值得注意的是,如果x得到的结果<1<1还要将x+=nx+=n
由于可能存在多个合理答案,这个题目要求数值最小的!
代码
#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; }
相关文章推荐
- CodeForces 342C--矩形盒子能最多放多少个球
- CodeForces 722B. Verse Pattern(模拟)
- codeforces 312
- Road Improvement - CodeForces 543 D 树形dp
- CodeForces 778B Bitwise Formula 解题报告
- codeforces 55D. Beautiful numbers
- 【打CF,学算法——二星级】CodeForces 626C Block Towers(暴力/二分)
- Codeforces 729B Spotlights 简单暴力
- Codeforces Ilya and Queries
- Codeforces 165E Compatible Numbers
- codeforces 785D
- Codeforces 842 C. Ilya And The Tree 树上dp
- 【打CF,学算法——三星级】CodeForces 567D One-Dimensional Battle Ships (二分)
- CodeForces 48E
- codeforces 12B - Correct Solution?
- Codeforces 545E【最小树形图】
- CodeForces - 698B Fix a Tree(并查集)
- CodeForces 55 C.Pie or die(博弈论)
- CodeForces 681D Gifts by the List (树上DFS)
- Codeforces 735C - Tennis Championship 规律