你说得对但是
  • 板块学术版
  • 楼主AKPC
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/8/2 16:30
  • 上次更新2023/11/3 06:20:05
查看原帖
你说得对但是
540363
AKPC楼主2023/8/2 16:30

调不出,赏 33 关。

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ext {cout<<0;return 0;}
string s;
int a[100001],b[100001],tipa,tipb,tip,cnt1,cnt2,cnt3,x,ans,op=3;
inline bool check(int x,char ch){
	if (x>=1&&ch<='z'&&ch>='a') return 1;
	if (x>=2&&ch<='9'&&ch>='0') return 1;
	if (x>=3&&ch=='_') return 1;
	return 0;
}
signed main(){
	cin>>s,s+='#';
	for (int i=0;i<s.length();i++){
		if (s[i]=='@'&&tipa<=tipb) a[++tipa]=i;
		else if (s[i]=='.'&&tipa>tipb) b[++tipb]=i;
	}
	if (tipa>tipb) tipa=tipb;
	for (int i=0;i<s.length();i++){
		if (i==a[tip+1]) {op=2;continue;}
		if (i==b[tip+1]) {op=1;continue;}
		if (op==1&&check(op,s[i])) cnt2++;
		else if (op==1) ans+=cnt1*cnt2*x,cnt1=cnt3=cnt2=0,x=0,op=3,i=b[++tip];
		if (op==3&&check(op,s[i])) {if (s[i]>='a'&&s[i]<='z') cnt1++;}
		else if (op==3) cnt1=0;
		if (op==2&&!check(op,s[i])) x=0;
		else if (op==2) x=1;
	}
	cout<<ans;
	return 0;
}

验证码 nima 祭。

2023/8/2 16:30
加载中...