社区讨论
超时了!
P1088[NOIP 2004 普及组] 火星人参与者 2已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @m2n7bi7q
- 此快照首次捕获于
- 2024/10/24 19:09 去年
- 此快照最后确认于
- 2025/11/04 16:19 4 个月前
为什么我这个超时了啊?求大佬指点
CPP#include <iostream>
#include <cstdio>
using namespace std;
int N; // 手指数量
int M; // 加的数字
int res = 0;
int mar[10005];
int arr[10005];
bool st[10005];
bool return0 = false;
void f(int start) {
if (return0) {
return;
}
if (start > N) {
res++;
if (res == M + 1) { // 找到一开始的数就是一
for (int j = 1; j <= N; j++) {
printf("%d ", arr[j]);
}
return0 = true;
}
return;
}
for (int i = 1; i <= N; i++) {
if (!res) {
i = mar[i];
// 不是 out[i] = mar[i]
// 不然后面 if 又改回来
}
if (!st[i]) {
arr[start] = i;
st[i] = true;
f(start + 1);
// 恢复现场
st[i] = false;
}
}
}
int main() {
scanf("%d%d", &N, &M);
for (int i = 1; i <= N; i++) {
scanf("%d", &mar[i]);
}
f(1);
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...