如何在ACGO的答题中假装成AI(1)
2025-08-08 10:59:09
发布于:河北
注意事项
1.请不要在正式比赛中本教程
2.被封了后果自负(bushi
“AI的答题方式”
1.写代码的格式
现在大部分的AI为了让人理解他的思考,会在代码后使用注释,例如
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
// 营地结构体,存储距离、海拔和食物信息
struct Camp {
int d, h, f;
};
int n, F, C, k, D;
vector<Camp> camps;
int min_camps = INT_MAX; // 最少使用的营地数量
int min_days = INT_MAX; // 对应的最少天数
// 计算距离d需要的天数(向上取整)
int calc_days(int d) {
if (d <= 0) return 0;
return (d + k - 1) / k; // 等价于ceil(d/k)的整数计算方式
}
// 检查从当前位置current_d,携带food量,能否到达目标位置target_d
bool can_reach(int current_d, int target_d, int food) {
int distance = target_d - current_d;
if (distance <= 0) return true; // 目标位置在当前位置或之前
int need_days = calc_days(distance);
return need_days <= food; // 所需天数不超过携带的食物量
}
// 二分查找最大的能到达的营地索引
int find_max_reachable(int start_idx, int current_d, int food) {
int left = start_idx;
int right = n - 1;
int best = -1;
while (left <= right) {
int mid = (left + right) / 2;
if (can_reach(current_d, camps[mid].d, food)) {
best = mid; // 记录可达的营地
left = mid + 1; // 尝试寻找更远的营地
} else {
right = mid - 1; // 无法到达,尝试更近的营地
}
}
return best;
}
// DFS搜索:探索所有可能的路径
// 参数:当前位置、当前食物、已使用营地数、已用天数、下一个营地索引
void dfs(int current_d, int current_food, int camps_used, int days_used, int next_idx) {
// 剪枝:如果当前路径已不优于已知最优解,提前终止
if (camps_used >= min_camps) {
if (camps_used > min_camps || days_used >= min_days) {
return;
}
}
// 尝试直接到达山顶
int distance_to_top = D - current_d;
int days_needed = calc_days(distance_to_top);
if (days_needed <= current_food) {
// 更新最优解
if (camps_used < min_camps ||
(camps_used == min_camps && days_used + days_needed < min_days)) {
min_camps = camps_used;
min_days = days_used + days_needed;
}
return;
}
// 贪心选择:找到当前能到达的最远营地
int max_reachable = find_max_reachable(next_idx, current_d, current_food);
if (max_reachable == -1) return; // 无法到达任何下一个营地
// 从远到近尝试各个营地(贪心策略:优先尝试更远的营地)
for (int i = max_reachable; i >= next_idx; i--) {
int distance = camps[i].d - current_d;
int days = calc_days(distance);
int new_food = current_food - days + camps[i].f;
if (new_food > C) new_food = C; // 不能超过最大携带量
// 递归搜索下一个营地
dfs(camps[i].d, new_food, camps_used + 1, days_used + days, i + 1);
}
}
int main() {
// 读取输入
cin >> n >> F >> C >> k;
camps.resize(n);
for (int i = 0; i < n; i++) {
cin >> camps[i].d >> camps[i].h >> camps[i].f;
}
cin >> D;
// 初始状态:从大本营(0)出发,携带F食物
dfs(0, F, 0, 0, 0);
// 输出结果
if (min_camps != INT_MAX) {
cout << min_camps << " " << min_days << endl;
} else {
cout << -1 << endl;
}
return 0;
}
很明显,AI会在结构体和循环中将注释放在代码上方
且AI还会在注释文字前加一个“ ”。
cout << (people - 1) / 2 + 1 << endl;
(你发现了什么
是的,这个艾斯比AI对空格特别热爱,只要能加空格就要加
请各位看看这个叫people的变量,相信作为正常人类的你肯定不会这么写的
但在AI的思维中,为了考虑人类,t他会使用某个单词作为变量·。。。
代表人的 | 代表动物 |
---|---|
people | animal |
(强烈建议ACGO加一个和洛谷差不多的
明天继续
全部评论 4
但是我的码风和 AI 几乎一样啊
2025-08-08 来自 浙江
0哈哈
2025-08-08 来自 河北
0幸好我我平时连行,不容易混淆
2025-08-08 来自 浙江
0
是个人物
2025-08-08 来自 浙江
0https://www.acgo.cn/problemset/info/61809?teamCode=1887694635765641216
2025-08-08 来自 河北
0文章用提
2025-08-08 来自 河北
0写完我感觉要躺了
2025-08-08 来自 河北
0
换了个题
2025-08-08 来自 河北
0
有帮助,赞一个