Help!!!救救孩子吧,两个TLE(ToT)
查看原帖
Help!!!救救孩子吧,两个TLE(ToT)
1024853
sana_37楼主2023/10/3 15:13

不知道为什么TLE了两个点,求大佬看看!!!

#include<iostream>
#include<string.h>
#include<string>
using namespace std;
long long  Change(long long l, long long  r, string str)
{
	long long  sum = 0;
	long long  begin = l;
	if (r - l > 4)
	{
		begin = r - 4;
	}
	for (long long i = begin; i < r; i++)
	{
		sum = sum * 10 + str[i] - '0';
	}
	return sum%10000;
}

int main()
{
	string str;
	getline(cin, str);
        //存转化的数字
        long long  *result=(long long  *)malloc(sizeof(long long  )*str.length());
        //存符号                              
	char* sign = (char*)malloc(sizeof(int) * str.length());

	int re_len = 0;
	int sg_len = 0;
	long long  len =str.length();
	
	for (long long index = 0; index < len;)
	{
		long long  l = index;
		while (index < len && str[index] >= '0' && str[index] <= '9')
		{
			index++;
		}
		result[re_len++] = Change(l, index, str);
		if (sg_len > 0)
		{
			if (sign[sg_len - 1] == '*')
			{
				result[re_len - 2] = (result[re_len - 1] * result[re_len - 2]) % 10000;
				re_len--;
			}
		}
		if (index < len)
		{
			sign[sg_len++] = str[index];
			index++;
		}

	}	
	for (long long i = 0; i < re_len; i++)
	{
		result[i + 1] = (result[i] + result[i + 1]) % 10000;
	}
	
	cout << result[re_len - 1] << endl;

	return 0;
}
2023/10/3 15:13
加载中...