2 条题解
-
0
标记当前还有没有 1,以及连续输出了几个 1
#include <bits/stdc++.h> using namespace std; int main() { freopen("three.in", "r", stdin); freopen("three.out", "w", stdout); int n, m; cin >> n >> m; int now = 0; // 当前已经连续输出了几个 1 for (int i = 1; i <= n; i++) if (m != 0 && now != 2) { cout << 1; m--; now++; } else { cout << 0; now = 0; } return 0; }
发现 1 的位置就是非 3 的倍数位置
#include <bits/stdc++.h> using namespace std; int main() { freopen("three.in", "r", stdin); freopen("three.out", "w", stdout); int n, m; cin >> n >> m; for (int i = 1; i <= n; i++) if (m != 0 && i % 3 != 0) { cout << 1; m--; } else { cout << 0; } return 0; }
-
0
A. 不要三个一
显然要尽可能把 往高位放,如果放了两个 就来一个 来避免非法,所以 应该放在从左往右第 个,这些除以 余 的位置中。所以可以根据是否还有 来决定怎么输出。
- 子任务 1:只有一个 ,那直接输出 个 和 个 即可。
- 子任务 2:显然这个子任务的输出是 这样的格式。
- 子任务 3:
凑数给愿意写 个if
打表的同学送的分数。
满分参考代码:
#include <bits/stdc++.h> using namespace std; int n, m; int main() { freopen("three.in", "r", stdin); freopen("three.out", "w", stdout); cin >> n >> m; for (int i = 1; i <= n; i++) { if (m > 0) { if (i % 3 == 1 || i % 3 == 2) { cout << 1; m--; } else cout << 0; } else cout << 0; } return 0; }
- 1
信息
- ID
- 1596
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 5
- 标签
- 递交数
- 44
- 已通过
- 17
- 上传者