月赛T1,有人能分析一下复杂度吗
  • 板块灌水区
  • 楼主JoeBiden2020
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/1/2 18:23
  • 上次更新2023/10/28 13:00:30
查看原帖
月赛T1,有人能分析一下复杂度吗
432183
JoeBiden2020楼主2022/1/2 18:23

卡了好久的常才卡过,length() 的常数太坑了。。

#include<bits/stdc++.h>
#define int long long
using namespace std;
string a[1000001],s,ps;
int n,b[1000001],cnt1,cnt2,ans1,ans2,len[1000001],sb=0,qwq,S,used,lens,lenp;
char cur;
set<int> q1,q2;
signed main(){
	ios::sync_with_stdio(false);
	cin>>n;
	for(register int i=1;i<=n;i++){
		cin>>a[i];
		len[i]=a[i].length();
		S+=len[i];
		q1.insert(i);
		q2.insert(i);
	}
	if(n==1){
		s=a[1];goto rrr;
	}
	cur='0';
	while(used<S){
		for(set<int>::iterator it=q1.begin();it!=q1.end();it++){
			if(b[*it]==len[*it]){
				it=q1.erase(it);
			}
			while(a[*it][b[*it]]==cur&&b[*it]<len[*it]){
				s+=cur;lens++;
				b[*it]++; 
				used++;
			}
		}
		if(lens==lenp){
			cur=cur=='1'?'0':'1';
		}
		lenp=lens;
	}
	qwq=s.length();
	for(register int i=0;i<qwq;i++){
		if(s[i]==s[i+1])ans1++;
	}
	memset(b,0,sizeof(b));
	cur='1';s="";used=0;lens=0;lenp=0;
	while(used<qwq){
		for(set<int>::iterator it=q2.begin();it!=q2.end();it++){
			if(b[*it]==len[*it]){
				it=q2.erase(it);
			}
			while(a[*it][b[*it]]==cur&&b[*it]<len[*it]){
				s+=cur;lens++;
				b[*it]++; 	
				used++;
			}
		}
		if(lens==lenp){
			cur=cur=='1'?'0':'1';
		}
		lenp=lens;
	}
rrr:
	qwq=s.length();
	for(int i=0;i<qwq;i++){
		if(s[i]==s[i+1])ans2++;
	}
	cout<<max(ans1,ans2);
}
2022/1/2 18:23
加载中...