#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
string s;
signed main()
{
cin>>n>>s;
if(s==string(n,'F'))
{
cout<<n<<endl;
for(int i=0;i<n;i++)
{
cout<<i<<endl;
}
}
else
{
int l=0,r=n-1;
while(s[l]=='F') l++;
while(s[r]=='F') r--;
int low=0,high=0;
auto str=s;
for(int i=l;i<=r;i++)
{
if(str[i]=='F')
{
if(str[i-1]=='B') str[i]='E';
else str[i]='B';
}
if(i>l && str[i]==str[i-1]) low++;
}
str=s;
for(int i=l;i<=r;i++)
{
if(str[i]=='F') str[i]=str[i-1];
if(i>l && str[i]==str[i-1]) high++;
}
int ends=l+n-1-r,d=2;
if(ends) high+=ends,d=1;
cout<<(high-low)/d+1<<endl;
for(int i=low;i<=high;i+=d) cout<<i<<endl;
}
}
贪心
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
string s;
cin>>s;
int ans=0;
for(int i=0;i+1<s.size();i++)
{
char a=s[i],b=s[i+1];
if(a==b || a=='?' || b=='?')
{
ans++;
i++;
}
}
cout<<ans;
}
二分+区间和并
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define x first
#define y second
const int N=1e5+10;
int n,m;
pii w[N],q[N];
bool check(int x)
{
int num=0;
for(int i=0;i<n;i++)
{
int L=w[i].x,S=w[i].y;
if(S<=x)
{
int t=x-S;
int l=max(1LL,L-t),r=min(m,L+t);
q[num++]={l,r};
}
}
sort(q,q+num);
int st=-1,ed=-1;
for(int i=0;i<num;i++)
{
if(q[i].x<=ed+1) ed=max(ed,q[i].y);
else st=q[i].x,ed=q[i].y;
}
return st==1 && ed==m;
}
signed main()
{
cin>>n>>m;
for(int i=0;i<n;i++) cin>>w[i].x>>w[i].y;
int l=0,r=2e9+10;
while(l<r)
{
int mid=l+r>>1;
if(check(mid)) r=mid;
else l=mid+1;
}
cout<<l;
}
数学
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{
int n;
cin>>n;
int m=0,d=0;
while(n)
{
m++;
if(n%3==1 && d==0) d=m;
n-=(n+2)/3;
}
cout<<m<<" "<<d;
}
signed main()
{
int t=1;
//cin>>t;
while(t--) solve();
}
贪心
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
int n,d;
int v[N],a[N];
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>d;
for(int i=1;i<n;i++) cin>>v[i];
for(int i=1;i<=n;i++) cin>>a[i];
int res=0;
int oil=0,dist=0;
int price=a[1];
for(int i=2;i<=n;i++)
{
dist+=v[i-1];
int t=(dist+d-1)/d-oil;
res+=t*price;
oil+=t;
price=min(price,a[i]);
}
cout<<res;
return 0;
}