萌新刚学OI,玄学RE,求助
查看原帖
萌新刚学OI,玄学RE,求助
192376
Zoe_Granger楼主2020/5/17 20:49

rt,本地运行没有问题

过于玄学

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#define LL long long
using namespace std;

int n[35], k, a[20][20], f[20], ans[1000];
string s;

int main()
{
	cin >>s;
	int ln=s.size(), la;
	for (int i=0; i<ln; i++)
		n[i]=s[ln-i-1]-'0';
	
	scanf ("%d", &k);
	for (int i=1; i<=k; i++)
	{
		int u, v;
		scanf ("%d%d", &u, &v);
		a[u][v] = 1;
	}
	
	for (int k=0; k<10; k++)
		for (int i=0; i<10; i++)
			for (int j=0; j<10; j++)
				if (a[i][k] && a[k][j])
					a[i][j] = 1;
	
	for (int i=0; i<=9; i++)
	{
		a[i][i] = 1;
		for (int j=0; j<=9; j++)
			f[i]+=a[i][j];
	}
	
	int a[1000];
	for (int u=0; u<=9; u++)
	{
		int l=0, x=f[u];
		while (x)
		{
			a[l++] = x%10;
			x/=10;
		}
		if (u==0)
			for (int i=0; i<l; i++)
				ans[i] = a[i];
		
		la+=100;
		while (ans[la-1]==0 && la>1)
			la--;
		
		for (int i=la-1; i>=0; i--)
			for (int j=l-1; j>=0; j--)
			{
				la = max(la, i+j);
				ans[i+j] = ans[i]*a[j];
				if (ans[i+j]>=10)
				{
					ans[i+j+1] += ans[i+j]/10;
					ans[i+j] %= 10;
				}
			}
	}
	
	while (ans[la-1]==0 && la>1)
		la--;
	for (int i=la-1; i>=0; i--)
		printf ("%d", ans[i]);
	return 0;
}
2020/5/17 20:49
加载中...