请问为啥会re
查看原帖
请问为啥会re
357237
Unknown__楼主2023/10/22 08:56
#include <iostream>
#include <set>
#include <cstdio>
#include <map>
#include <cstring>
using namespace std;
set<string> book,ans;
map<string,int> vis;
int n,s[1011][10],ss[11];
int main()
{
	int i,j,l,len;
	cin>>n;
	for(i = 1;i <= n;i++)
	{
	    string tmp;
		for(j = 1;j <= 5;j++)
		{
			cin>>s[i][j];
			tmp.push_back(s[i][j] + '0');
		}
		vis[tmp] = -1;
	}
	for(len = 1;len <= n;len++)
	{
		book.clear();
		for(i = 1;i <= 5;i++)ss[i] = s[len][i];
		for(i = 1;i <= 5;i++)
		{
			int t = ss[i];
			
			for(l = 1;l <= 9;l++)
			{string cmp;
				ss[i] = (ss[i] + l) % 10;
				for(j = 1;j <= 5;j++) cmp.push_back(ss[j] + '0');
				if(vis[cmp] != -1 && !book.count(cmp)) book.insert(cmp);
				ss[i] = t;
			}
		}
		for(i = 1;i <= 5;i++)
		{
			int t = ss[i];
			
			for(l = 1;l <= 9;l++)
			{string cmp;
				ss[i] = (ss[i] - l + 10) % 10;
				for(j = 1;j <= 5;j++) cmp.push_back(ss[j] + '0');
				if(vis[cmp] != -1 && !book.count(cmp)) book.insert(cmp);
				ss[i] = t;
			}
		}
		for(i = 1;i < 5;i++)
		{
			int t1 = ss[i],t2 = ss[i + 1];
			
			for(l = 1;l <= 9;l++)
			{string cmp;
				ss[i] = (ss[i] + l) % 10,ss[i + 1] = (ss[i + 1] + l) % 10;
				for(j = 1;j <= 5;j++) cmp.push_back(ss[j] + '0');
				if(vis[cmp] != -1 && !book.count(cmp)) book.insert(cmp);
				ss[i] = t1,ss[i + 1] = t2;
			}
		}
		for(i = 1;i < 5;i++)
		{
			int t1 = ss[i],t2 = ss[i + 1];
		
			for(l = 1;l <= 9;l++)
			{	string cmp;
				ss[i] = (ss[i] - l + 10) % 10,ss[i + 1] = (ss[i + 1] - l + 10) % 10;
				for(j = 1;j <= 5;j++) cmp.push_back(ss[j] + '0');
				if(vis[cmp] != -1 && !book.count(cmp)) book.insert(cmp);
				ss[i] = t1,ss[i + 1] = t2;
			}
		}
		if(len == 1) for(set<string>:: iterator it = book.begin();it != book.end();it++) ans.insert(*it);
		else
		{
			for(set<string>:: iterator it = ans.begin();it != ans.end();it++)if(!book.count(*it)) ans.erase(*it);
		}
	}
	cout<<ans.size();
}
2023/10/22 08:56
加载中...