问:为什么超时
查看原帖
问:为什么超时
753553
Resonate楼主2024/7/31 15:24

4^100=10^8=1亿,加上了O2还是超时...

#include<bits/stdc++.h>
#define int long long
using namespace std;
int k,n;
string writter[111];
map<string,int>name;
char ans[111][111];
bool check(char a) { return (a >= 'a' && a <= 'z') || (a >= 'A' && a <= 'Z'); }
inline string readstr() {
    string s;
    char aa = getchar();
    while (!check(aa)) aa = getchar();
    while (check(aa)) s += aa, aa = getchar();
    return s;
}
bool a_is_bigger_than_b(string a,string b)
{
	if(a.size()<b.size())
	{
		return 0;
	}
	else if(a.size()>b.size())
	{
		return 1;
	}
	else
	{
		for(int i=0;i<a.size();i++)
		{
			if(a[i]>b[i])
			{
				return 1;
			}
			else if(a[i]<b[i])
			{
				return 0;
			}
		}
	}
}
signed main()
{
	memset(ans,'?',sizeof(ans));
	cin>>k>>n;
	for(int i=1;i<=n;i++)
	{
		ans[i][i]='B';
	}
	for(int i=1;i<=n;i++)
	{
		string s;
//		cin>>s;
		s=readstr();
		name[s]=i;
	}
	for(int i=1;i<=k;i++)
	{
		for(int j=1;j<=n;j++)
		{
//			cin>>writter[j];
			writter[j]=readstr();
		}
		for(int j=n;j>=2;j--)
		{
			// cout<<writter[j-1]<<" "<<writter[j]<<" "<<a_is_bigger_than_b(writter[j-1],writter[j])<<endl;
			int wei=0;
			for(int k=j-1;k>=1;k--)
			{
				// cout<<writter[k]<<" "<<writter[j]<<endl;
				if(a_is_bigger_than_b(writter[k],writter[j]))
				{
					wei=k;
					break;
				}
			}
			// cout<<wei<<endl;
			for(int k=wei+1;k<=n;k++)
			{
				for(int o=1;o<=wei;o++)
				{
					ans[name[writter[o]]][name[writter[k]]]='0';
					ans[name[writter[k]]][name[writter[o]]]='1';
				}
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cout<<ans[i][j];
		}
		cout<<endl;
	}
}
2024/7/31 15:24
加载中...