0%

ABC-384-D - Repeated Sequence

思路讲解

图比较简陋,大概就是叙述了为什么可以用双指针,以及问题的转化

我就想多加一段中可不可以?当然可以

多加一段前或后 前&后?也可以

我想全部用双指针嘛,所以说选前后相当于就是把中间扣掉嘛

AC代码

https://atcoder.jp/contests/abc384/submissions/62236712

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <bits/stdc++.h>
#define FOR(i, a, b) for (int i = a; i <= b; ++i)
#define ROF(i, a, b) for (int i = a; i >= b; --i)
#define all(x,size) x.begin()+1,x.begin()+size+1
#define all1(x) x.begin(),x.end()

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll,ll> pll;
typedef array<ll,3> arr;
typedef double DB;
const ll MAXN=static_cast<ll>(2e5)+10,MAXval=static_cast<ll>(1e18)+3;

ll N,S,A[MAXN],sumA[MAXN],sumBack[MAXN],originS;

int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>N>>originS;
// ll sumAll=0;
FOR(i, 1, N){
cin>>A[i];
sumA[i]=sumA[i-1]+A[i];
}
ROF(i, N, 1){
sumBack[i]=sumBack[i+1]+A[i];
}
S=originS;
if(originS%sumA[N]==0) {cout<<"Yes\n";return 0;}
if(S>sumA[N]){ // 大于sumA的问题转化为小于sumA的问题
S=originS%sumA[N];
// 双指针
ll flag=2;
FOR(i, 1, N){
ll sum=sumA[flag-1]-sumA[i-1];
bool needBreak=false;
FOR(j, flag, N){
if(sum>S) {flag=j;break;}
if(sum+A[j]<S && j==N) {needBreak=true;break;}
if(sum==S){
cout<<"Yes\n";
return 0;
}
sum+=A[j];
}
if(needBreak) break;
}
flag=2;
FOR(i, 1, N){
ll sum=sumA[flag-1]-sumA[i-1];
bool needBreak=false;
FOR(j, flag, N){
if(sum>sumA[N]-S) {flag=j;break;}
if(sum+A[j]<sumA[N]-S && j==N) {needBreak=true;break;}
if(sum==sumA[N]-S){
cout<<"Yes\n";
return 0;
}
sum+=A[j];
}
if(needBreak) break;
}
}else{
ll flag=2;
FOR(i, 1, N){
ll sum=sumA[flag-1]-sumA[i-1];
FOR(j, flag, N){
if(sum>S) {flag=j;break;}
if(sum==S){
cout<<"Yes\n";
return 0;
}
sum+=A[j];
}
}
}
cout<<"No\n";
return 0;
}
/*
WA*2
https://atcoder.jp/contests/abc384/submissions/62236467

3 15
3 8 4

*/

心路历程(WA,TLE,MLE……)

WA*2
https://atcoder.jp/contests/abc384/submissions/62236467

感谢这个讨论

https://www.luogu.com.cn/discuss/1022682

1
2
3
3 15
3 8 4

其实我之前写过一个这种情况的特判,被我自己删掉了