原CF 1138A Sushi for Two
The basic idea
And a continuous state before each state of the dependent and can take the lower limit, when the state changes, the counter is reset
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;cin>>n;int num1=0,num2=0,sum=0;
int pre=0;
for(int i=0;i<n;i++)
{
int num;cin>>num;
if(num==1)
{
if(pre==2)
num1=0;
num1++;
}
if(num==2)
{
if(pre==1)
num2=0;
num2++;
}
pre=num;
sum=max(sum,min(num1,num2));
}
cout<<sum*2<<endl;
}
原CF 1141C Polycarp Restores Permutation
The basic idea
Determining the maximum number is at the beginning, it can be derived later, and the original column number starts from 1, by subtracting the difference between the maximum and minimum, and finally determines whether to repeat vector
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;ll q[200020],arr[200020];
vector<ll>brr;
int main()
{
cin>>n;
for(int i=0;i<n-1;i++)
{
cin>>q[i];
}
arr[0]=n;ll maxn=n,minn=9999999;
for(int i=1;i<n;i++)
{
arr[i]=arr[i-1]+q[i-1];
maxn=max(maxn,arr[i]);
}
for(int i=0;i<n;i++)
{
arr[i]-=maxn-n;
brr.push_back(arr[i]);
}
sort(brr.begin(),brr.end());
for(int i=0;i<n-1;i++)
{
if(brr[i+1]-brr[i]!=1)
{
//cout<<i<<endl;
cout<<-1<<endl;
return 0;
}
}
for(int i=0;i<n;i++)
{
cout<<arr[i]<<" ";
}
return 0;
}
F original title CF 1141E Superhero Battle
The basic idea
Subtracting a first minimum value, determine whether more than H, then reduced cycle, using division, using the last step
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
ll h,n,arr[200020];
int main()
{
cin>>h>>n;
long long sum=0,time=0,minn=0,cnt=0;
for(int i=1;i<=n;i++)
{
cin>>arr[i];
sum+=arr[i];
if(sum<minn)
{
minn=min(minn,sum);
cnt=i;
}
if(minn+h<=0)
{
cout<<i<<endl;
return 0;
}
}
//cout<<sum<<" "<<cnt<<endl;
if(sum>=0&&minn<h)
{
cout<<-1<<endl;
return 0;
}
h+=minn;
time+=cnt;
time+=(h/(-sum))*n;
h=h%(-sum);
// cout<<h<<endl;
ll i=cnt+1;
while(h>0)
{
if(i%(n+1)==0)i++;
h+=arr[(i++)%(n+1)];
//cout<<h<<endl;
time++;
}
cout<<time;
return 0;
}