竞赛讨论区 > 段错误,通过率85%,求助大家!
头像
Mr.Dorry
发布于 2020-08-23 21:15
+ 关注

段错误,通过率85%,求助大家!

段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起
case通过率为85.00%
请大家帮忙看看这是为什么不能通过呢?
我的思路是对每个进制先生成主串,然后判断主串是否包含子串。
#include<iostream>
using namespace std;

char sonstr[(int)1e6]; // 子串
char mainstr[(int)8e5]; // 主串
int _sc[16];

// 子串长度
int Len()
{
	for (int i = 0; i < 8e5; i++)
	{
		if (!sonstr[i]) return i;
	}
	return 0;
}

// 进制转换
int System_change(char* tostr, int x, int to_system)
{
	int size, pos = 0;
	while (x >= to_system)
	{
		_sc[pos++] = x % to_system;
		x = x / to_system;
	}
	_sc[pos++] = x;
	size = pos;

	int strpos = 0;

	while (pos--)
	{
		if(_sc[pos] < 10)tostr[strpos++] = _sc[pos] + 48;
		else tostr[strpos++] = _sc[pos] + 55;
	}

	return size;
}

// 字符串包含
bool Contains(char* main, char* son, int range)
{
	range++;
	while (range--)
	{
		char* newmain = main + range;
		char* newson = son;
		while (*(newmain++) == *(newson++))
		{
			if (!*newson)return true;
		}
	}
	return false;
}

int main()
{
	int n;
	cin >> n;
	cin >> sonstr;
	int mainsize = 0; // 主串长度
	int sonsize = Len(); // 子串长度
	if (!sonsize)
	{
		cout << "no";
		return 0;
	}

	for (int system = 2; system <= 16; system++) // 进制循环
	{
		// 生成主串
		for (int i = 1; i <= n; i++)
		{
			int len = System_change(mainstr + mainsize, i, system);
			mainsize += len;
		}

		// 是否包含子串
		if (Contains(mainstr, sonstr, mainsize - sonsize))
		{
			cout << "yes";
			return 0;
		}
		mainsize = 0;
	}
	cout << "no";
	return 0;
}

全部评论

(0) 回帖
加载中...
话题 回帖

本文相关内容

等你来战

查看全部

热门推荐