新出的题目dalao看看有问题木

1 个赞

(帖子已被作者删除)

1 个赞

第一题难度:

  • 绿
  • 不干了!灰
0 投票人

第二题难度:

  • 绿
  • 不干了!灰
0 投票人
1 个赞

蛋小黄你是认真的吗我很难绷住

2 个赞

???这关但小黄什么是>

1 个赞

太简单了没有数据结构而且数据范围太小了全用暴力过掉

1 个赞

看投票啊

1 个赞

那你觉得能不能把数据开打亿点点

1 个赞

直接开到1e6(

1 个赞

那第一题不炸了吗(((

1 个赞

哈哈我去改反正数据是代码生成的改下简单的很

1 个赞
#include <iostream>
#include <fstream>
#include <random>
#include <ctime>
#include <vector>
using namespace std;

const int MAX_N = 50;
const int MAX_M = 50;
const int MAX_T = 20;

pair<char, int> simulate(const string matrix[], int n, int m, int t, int x, int y)
{
	int signal[MAX_N][MAX_M] = {0};
	int start_x, start_y;
	for(int i = 0; i < n; ++i)
	{
		for(int j = 0; j < m; ++j)
		{
			if(matrix[i][j] == '.')
			{
				start_x = i;
				start_y = j;
				signal[i][j] = 15;
			}
		}
	}
	for(int time = 0; time < t; ++time)
	{
		int new_signal[MAX_N][MAX_M];
		for(int i = 0; i < n; ++i)
		{
			for(int j = 0; j < m; ++j)
			{
				new_signal[i][j] = signal[i][j];
			}
		}
		for(int i = 0; i < n; ++i)
		{
			for(int j = 0; j < m; ++j)
			{
				if(matrix[i][j] == '#')
				{
					if(i > 0 && signal[i - 1][j] > 0) new_signal[i][j] = max(new_signal[i][j], signal[i - 1][j] - 1);
					if(i < n - 1 && signal[i + 1][j] > 0) new_signal[i][j] = max(new_signal[i][j], signal[i + 1][j] - 1);
					if(j > 0 && signal[i][j - 1] > 0) new_signal[i][j] = max(new_signal[i][j], signal[i][j - 1] - 1);
					if(j < m - 1 && signal[i][j + 1] > 0) new_signal[i][j] = max(new_signal[i][j], signal[i][j + 1] - 1);
				}
				else if(matrix[i][j] == '>')
				{
					if(j > 0 && signal[i][j - 1] > 0)
					{
						new_signal[i][j] = 1;
						if(j < m - 1) new_signal[i][j + 1] = max(new_signal[i][j + 1], 15);
					}
				}
				else if(matrix[i][j] == '<')
				{
					if(j < m - 1 && signal[i][j + 1] > 0)
					{
						new_signal[i][j] = 1;
						if(j > 0) new_signal[i][j - 1] = max(new_signal[i][j - 1], 15);
					}
				}
				else if(matrix[i][j] == '^')
				{
					if(i < n - 1 && signal[i + 1][j] > 0)
					{
						new_signal[i][j] = 1;
						if(i > 0) new_signal[i - 1][j] = max(new_signal[i - 1][j], 15);
					}
				}
				else if(matrix[i][j] == 'v')
				{
					if(i > 0 && signal[i - 1][j] > 0)
					{
						new_signal[i][j] = 1;
						if(i < n - 1) new_signal[i + 1][j] = max(new_signal[i + 1][j], 15);
					}
				}
				else if(matrix[i][j] == '%')
				{
					if((i > 0 && signal[i - 1][j] > 0) || (i < n - 1 && signal[i + 1][j] > 0) ||
					    (j > 0 && signal[i][j - 1] > 0) || (j < m - 1 && signal[i][j + 1] > 0))
					{
						new_signal[i][j] = 1;
					}
				}
				else if(matrix[i][j] == '&')
				{
					if((i > 0 && signal[i - 1][j] > 0) || (i < n - 1 && signal[i + 1][j] > 0) ||
					    (j > 0 && signal[i][j - 1] > 0) || (j < m - 1 && signal[i][j + 1] > 0))
					{
						new_signal[i][j] = 1;
					}
				}
			}
		}
		for(int i = 0; i < n; ++i)
		{
			for(int j = 0; j < m; ++j)
			{
				signal[i][j] = new_signal[i][j];
			}
		}
	}
	return {matrix[x - 1][y - 1], signal[x - 1][y - 1]};
}

void generateData(int index, bool isSmallData, bool isLargeData)
{
	// 使用 std::mt19937 作为随机数生成器
	std::random_device rd;
	std::mt19937 gen(rd());
	std::uniform_int_distribution<> dis_n(1, MAX_N);
	std::uniform_int_distribution<> dis_m(1, MAX_M);
	std::uniform_int_distribution<> dis_t(1, MAX_T);
	std::uniform_int_distribution<> dis_small(1, 5);
	std::uniform_int_distribution<> dis_elem(0, 9);
	int n, m, t;
	if(isSmallData)
	{
		n = dis_small(gen);
		m = dis_small(gen);
		t = dis_small(gen);
	}
	else if(isLargeData)
	{
		n = MAX_N;
		m = MAX_M;
		t = dis_t(gen);
	}
	else
	{
		n = dis_n(gen);
		m = dis_m(gen);
		t = dis_t(gen);
	}
	string matrix[MAX_N];
	for(int i = 0; i < n; ++i)
	{
		for(int j = 0; j < m; ++j)
		{
			if(i == 0 && j == 0)
			{
				matrix[i] += '.';
			}
			else
			{
				int r = dis_elem(gen);
				if(r < 6)
				{
					switch(r)
					{
						case 0:
							matrix[i] += '#';
							break;
						case 1:
							matrix[i] += '>';
							break;
						case 2:
							matrix[i] += '<';
							break;
						case 3:
							matrix[i] += '^';
							break;
						case 4:
							matrix[i] += 'v';
							break;
						case 5:
							matrix[i] += '%';
							break;
					}
				}
				else
				{
					matrix[i] += '&';
				}
			}
		}
	}
	std::uniform_int_distribution<> dis_x(1, n);
	std::uniform_int_distribution<> dis_y(1, m);
	int x = dis_x(gen);
	int y = dis_y(gen);
	ofstream in_file("F:\\" + to_string(index) + ".in");
	in_file << n << " " << m << " " << t << endl;
	for(int i = 0; i < n; ++i)
	{
		in_file << matrix[i] << endl;
	}
	in_file << x << " " << y << endl;
	in_file.close();
	auto result = simulate(matrix, n, m, t, x, y);
	ofstream out_file("F:\\" + to_string(index) + ".out");
	out_file << result.first << endl;
	out_file << result.second << endl;
	out_file.close();
}

int main()
{
	std::random_device rd;
	std::mt19937 gen(rd());
	std::uniform_int_distribution<> dis(1, 10);
	int smallDataIndex = dis(gen);
	vector<int> largeDataIndices;
	while(largeDataIndices.size() < 3)
	{
		int index = dis(gen);
		if(index != smallDataIndex && find(largeDataIndices.begin(), largeDataIndices.end(), index) == largeDataIndices.end())
		{
			largeDataIndices.push_back(index);
		}
	}
	for(int i = 1; i <= 50; ++i)
	{
		cout<<i<<"\n";
		bool isSmallData = (i == smallDataIndex);
		bool isLargeData = (find(largeDataIndices.begin(), largeDataIndices.end(), i) != largeDataIndices.end());
		generateData(i, isSmallData, isLargeData);
	}
	return 0;
}

made in doubao

1 个赞

谁记得有某个东西叫STL容器

1 个赞

这样的话少说蓝

1 个赞

不是你第一题太简单了第一题 O(nm) 就能过只能红题了

1 个赞

你要用豆包写std的话那还是别出题了,因为同样别人也能用AI写出来

1 个赞

没办法,手写太慢了

1 个赞

第二题改成图说不定能1e5

1 个赞

6奥,切红题也慢

1 个赞

hh

1 个赞