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 个赞