求助这题
  • 板块学术版
  • 楼主vandijk
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/2/15 18:22
  • 上次更新2023/11/5 03:14:32
查看原帖
求助这题
340345
vandijk楼主2021/2/15 18:22

这个的A题,就是数字谜

//为啥TLE了?

/*
author:Rundc09
*/
#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<n;i++)
#define forn(i,a,b) for(int i=a;i<b;i++)
#define m_p make_pair
#define pb push_back
#define foreach(i,c) for(__typeof(c.begin())i=(c.begin());i!=(c).end();i++)
#define sz(s) s.size()
#define all(s) s.begin(),s.end()
#define MOD 1000000007
#define imax 2147483647
#define llmax 9223372036854775807
typedef long long ll;
using namespace std;
string s[15];
bool vis[15];
map<char,long long> mp;
int ans=0;
int n;
vector<char> v;
int sssss=0;
void dfs(int pos)
{
	if(pos==v.size())
	{	
		long long cnt=0;
		long long sum=0;
		for(int i=0;i<n-1;i++)
		{
			for(int j=0;j<s[i].size();j++)
			{
				sum=sum*10+mp[s[i][j]];
			}
			cnt+=sum;
			sum=0;
		}
		for(int j=0;j<s[n-1].size();j++)
		{
			sum=sum*10+mp[s[n-1][j]];
		}
		if(cnt==sum)ans++;
		return ;
	}
	for(int i=0;i<=9;i++)
	{
		if(!vis[i])
		{
			vis[i]=1;
			mp[v[pos]]=i;
			dfs(pos+1);
			vis[i]=0;
		}
	}
}
int main()
{
	cin>>n;
	set<char> st;
	for(int i=0;i<n;i++)
	{
		cin>>s[i];
		for(int j=0;j<s[i].size();j++)
		{
			st.insert(s[i][j]);
		}
	}
	for(set<char> :: iterator it=st.begin();it!=st.end();it++)
	{
		v.push_back(*it);
	}
	dfs(0);
	cout<<ans<<endl;
	return 0;
}
/* things you should look for
	* int overflow, array bounds
	* TLE or RE (maximum test cases)
	* WA (wrong test cases)
	* look for smth abandoned
	* special cases (n=1?)
	* do smth instead of nothing and stay organized
	* write smth down
	* WRITE smth DOWN
	* DON'T GET STUCK ON ONE APPROACH
*/
2021/2/15 18:22
加载中...