80分求调
查看原帖
80分求调
719140
only_joker楼主2023/10/18 08:03

应该是最后一个点太大然后爆long long了,有什么办法

#include<bits/stdc++.h>
using namespace std;
string s;
int k;
vector<int> a[100];
long long c[100];
long long sum=1;
bool b,bb;
int main(){
	cin>>s;
	cin>>k;
	for(int i=1;i<=k;i++)
	{
		int x,y;
		cin>>x>>y;
		b=false;
		if(x!=y) 
		{
			if(a[x].size()==0)
			{
				c[x]=1;
				a[x].push_back(y);
				for(int p=0;p<a[y].size();p++)
				{
					for(int o=0;o<a[x].size();o++) 
					{
						if(a[y][p]==a[x][o])
						{
							bb=true;
							break;	
						} 
					}
					if(bb==false)
					{
						a[x].push_back(a[y][p]);
						c[x]++;
					}
					bb=false;
				}
				continue;	
			} 
			for(int j=0;j<a[x].size();j++)
			{
				if(y==a[x][j])
				{
					b=true;
					break;
				} 
			} 
			if(b==false) 
			{
				a[x].push_back(y);
				c[x]++;
			} 
			for(int p=0;p<a[y].size();p++)
			{
				for(int o=0;o<a[x].size();o++) 
				{
					if(a[y][p]==a[x][o]||a[y][p]==x)
					{
						bb=true;
						break;	
					} 
				}
				if(bb==false)
				{
					a[x].push_back(a[y][p]);
					c[x]++;
				}
				bb=false;
			}
		}
	}
	for(int i=0;i<=9;i++)
	{
		if(a[i].size()==0)
		{
			continue;
		}
		for(int j=0;j<a[i].size();j++)
		{
			for(int p=0;p<a[a[i][j]].size();p++)
			{
				for(int o=0;o<a[i].size();o++) 
				{
					if(a[a[i][j]][p]==a[i][o]||a[a[i][j]][p]==i)
					{
						bb=true;
						break;	
					} 
				}
				if(bb==false)
				{
//					cout<<"jj"<<endl;
					a[i].push_back(a[a[i][j]][p]);
					c[i]++;
				}
				bb=false;
			}
		}
	}
//	for(int i=0;i<=9;i++)
//	{
//		if(a[i].size()==0)
//		{
//			cout<<"fuck";
//		}
//		for(int j=0;j<a[i].size();j++)
//		{
//			cout<<a[i][j]<<" ";
//		}
//		cout<<endl; 
//	}
	for(int i=0;i<s.size();i++)
	{
		if(c[s[i]-'0']==0)
		{
			continue; 
		}
		if(i==s.size()-1)
		{
			for(int j=0;j<=a[s[i]-'0'].size();j++)
			{
				if(a[s[i]-'0'][j]=='0')	
				{
					c[s[i]-'0']--; 
				}
			} 
			if(c[s[i]-'0']==0) break;
		}
		for(int o=0;o<a[s[i]-'0'].size();o++)
		{
			if(a[s[i]-'0'][o]==s[i]-'0'&&a[s[i]-'0'][o]!=-1)
			{
				a[s[i]-'0'][o]=-1;
				c[s[i]-'0']--;
				break;
			}
		}
		sum*=(c[s[i]-'0']+1);
	}
	cout<<sum;
} 
2023/10/18 08:03
加载中...