Codeforces Round#430 Div2 第一次hack别人的代码--------------附Codeforces842别人的题解

来源:互联网 发布:奔跑吧小百合酱 知乎 编辑:程序博客网 时间:2024/06/05 01:56

利用浮点数的精确除法与整数的整除(舍值)的差别,第一次成功hack别人的代码。

hack的测试数据 4 5 1 3 3。

那位外国朋友的代码被别人质疑过一次,没成功举出反例,然后我就用 4 5 1 3 3质疑成功了,不过他厉害,分分钟调试成功。

C题树图gcd, 暴力上, 计算所有可能。

#include <iostream>#include <cstring>#include <algorithm>#include <vector>#include <set>using namespace std;const int N = 200005;int n, a[N], ans[N];vector< vector<int> > v;set<int> s[N];int gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);}void dfs(int rt, int pre) {for (int t : s[pre]) s[rt].insert(gcd(t, a[rt]));a[rt] = gcd(a[pre], a[rt]);s[rt].insert(a[pre]);ans[rt] = *s[rt].rbegin();for (int t : v[rt]){if (t != pre)dfs(t, rt);}}int main(){ios::sync_with_stdio(0);while (cin >> n) {v.clear(); v.resize(n + 1); s[0].clear();for (int i = 1; i <= n; i++) {cin >> a[i];s[i].clear();}for (int i = 1; i < n; i++) {int x, y;cin >> x >> y;v[x].push_back(y);v[y].push_back(x);}a[0] = 0;s[0].insert(0);dfs(1, 0);cout << ans[1];for (int i = 2; i <= n; i++)   cout << " " << ans[i];cout << endl;}return 0;}
D题二分,把每次询问的x异或一下,然后每次的询问就相当于对初始的数组询问了。

#include <iostream>#include <cstring>using namespace std;const int N = 3e5;int cnt[1 << 19];int main(){ios::sync_with_stdio(false);int n, m;while (cin >> n >> m) {memset(cnt, 0, sizeof cnt);cnt[0] = 0;for (int i = 1; i <= n; ++i) {int x;cin >> x;cnt[x] = 1;}for (int i = 1; i <= N; ++i) cnt[i] += cnt[i - 1];int t = 0;while (m--) {int x;cin >> x;t ^= x;int l = 0, r = (1 << 19) - 1;for (int i = 18; i >= 0; --i) {int tmp = t & (1 << i), mid = l + r >> 1;if (tmp) { //若第i位为1if (cnt[r] - cnt[mid] < r - mid) l = mid + 1;else r = mid;}else {if (cnt[mid] - (l ? cnt[l - 1] : 0) < mid - l + 1) r = mid;else l = mid + 1;}}cout << (l ^ t) << endl;}}return 0;}

这是开学前一周,难道俄罗斯人知道中国大学生都该返校了,然后这两周就在codeforces三天举行一场比赛。又要熬到凌晨1点半了。好事还是坏事,未知。


原创粉丝点击