萌新求助,本地 AC 提交 WA
查看原帖
萌新求助,本地 AC 提交 WA
238408
vectorwyxSD省选加油楼主2022/1/20 15:03

RT,本机造的数据:

input

18
GHHGHHHHHHGGGHHHGH

output

35

本机输出 35,放到洛谷 ide 上跑就输出 55,勾选 O2 后在 ide 上直接 T 掉了。感觉是有 ub,但不知道具体是哪里出问题了,求神仙帮帮……

//author:望远星
#include<bits/stdc++.h>
#define pii pair<int,int>
#define fi first
#define se second
#define pb push_back
#define mk make_pair
#define sml(x,y) (x=min(x,y))
#define big(x,y) (x=max(x,y))
#define ll long long
#define ull unsigned long long
#define db double
#define fo(i,x,y) for(int i=x;i<=y;++i)
#define go(i,x,y) for(int i=x;i>=y;--i)
using namespace std;
inline int read(){int x=0,fh=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')fh=-1;ch=getchar();}while(isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*fh;}
inline void out(int *a,int l,int r){fo(i,l,r) cout<<*(a+i)<<' ';puts("");}

const int N=5e5+5;
vector<int> g;
int n;
char a[N];
ll ans;

ll calc(){
	int si=g.size()-1;
	//for(int i:g) cout<<i<<' ';putchar('\n');
	fo(i,1,si-1) ans+=(g[i]-g[i-1])*(g[i+1]-g[i]+0ll)-1;	
}

signed main(){
	cin>>n;scanf("%s",a+1);
	g.pb(0);fo(i,1,n) if(a[i]=='G') g.pb(i);g.pb(n+1);
	ans+=calc();
	g.clear();
	g.pb(0);fo(i,1,n) if(a[i]=='H') g.pb(i);g.pb(n+1);
	ans+=calc();
	fo(i,1,n-1) if(a[i]!=a[i+1]) ans-=2;
	cout<<ans;
	return 0;
}
2022/1/20 15:03
加载中...