TLE求助
查看原帖
TLE求助
597119
HouSibo楼主2024/1/10 20:35
#include<bits/stdc++.h>
using namespace std;
int n,ans;
bool h[200010],h1[200010];
unsigned long long mode=200005,mode1=20005;
unsigned long long powe(unsigned long long s,int d){
	unsigned long long c=1;
	for(int i=1;i<=d;i++){
		c=c*s;
	}
	return c;
}
int main(){
	//freopen("P3370.in","r",stdin);
	//freopen("P3370.out","w",stdout);
	int n;
	cin>>n;
	while(n--){
		string str;
		cin>>str;
		int ch;
		unsigned long long s=0,s1=0;
		for(int i=0;i<str.size();i++){
			ch=str[i];
			s=s+((unsigned long long)(powe(ch,i)))%mode;
			s1=s1+((unsigned long long)(powe(ch,i)))%mode1;
		}
		s=s%mode;
		s1=s1%mode1;
		if(h[s]==1&&h1[s1]==0){
			while(h[s]){
				s++;
			}
		}
		if(h[s]==0&&h1[s1]==1){
			while(h1[s1]){
				s1++;
			}
		}
		h[s]=1;
		h1[s1]=1;
		//cout<<s<<" "<<s1<<endl;
	}
	for(int i=0;i<=200000;i++){
		ans=ans+h[i];
		if(h[i]){
			cout<<i<<endl;
		}
	}
	cout<<ans<<endl;
	return 0;
}

开pow函数会因为精度不够而WA#1,6,9,10,11 使用自制函数会TLE#1,9,10,11

2024/1/10 20:35
加载中...