惊现 UKE
查看原帖
惊现 UKE
183603
SUNCHAOYI楼主2020/5/15 18:44

文本中包含数的个数不超过 500500,然后我开了个数组 string a[505];

然后 22 个点 RE,33 个点 UKE。

改成 string a[1505]; 竟然就过了。这是为什么啊(附上当时的数组过小的代码)

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
const int MAX = 505;
string a[MAX];
bool cmp(string x,string y)
{
	if(x.size() != y.size()) return x.size() < y.size();//数位不同
	else return x < y;//数位相同 
}
int main()
{
	int n,k = 0;
	string str,tmp;
	cin>>n;
	for(int i = 1;i <= n;i++)
	{
		cin>>str;tmp = "";//初始化 
		bool ok = 0;//数字有无出现 
		for(int j = 0;j < str.size();j++)
		{
			if('0' <= str[j] && str[j] <= '9') tmp += str[j],ok = 1;//数字出现 
			else
			{
				if(ok) a[++k] = tmp;//加入答案 
				tmp = "",ok = 0;//清0 
			}
		}
		if(ok) a[++k] = tmp;//加入答案 
	}
	for(int i = 1;i <= k;i++)//删去前导0 
	{
		tmp = "";bool ok = 0;//初始化 
		for(int j = 0;j < a[i].size();j++)
		{
			if(a[i][j] != '0') ok = 1;//第一个不为0的数字 
			if(ok) tmp += a[i][j];//记录有效数位 
		}
		if(ok) a[i] = tmp;//赋值
		else a[i] = '0';//为0的特殊情况 
	}
	sort(a + 1,a + k + 1,cmp);
	for(int i = 1;i <= k;i++) cout<<a[i]<<endl;
	return 0;
} 
2020/5/15 18:44
加载中...