ABC-384-D - Repeated Sequence · znzryb
## 思路讲解
图比较简陋,大概就是叙述了为什么可以用双指针,以及问题的转化


我想全部用双指针嘛,所以说选前后相当于就是把中间扣掉嘛
## AC代码
[https://atcoder.jp/contests/abc384/submissions/62236712](https://atcoder.jp/contests/abc384/submissions/62236712)
```cpp
#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://atcoder.jp/contests/abc384/submissions/62236467)
感谢这个讨论
[https://www.luogu.com.cn/discuss/1022682](https://www.luogu.com.cn/discuss/1022682)
```cpp
3 15
3 8 4
```
其实我之前写过一个这种情况的特判,被我自己删掉了