2021“MINIEYE杯”中国大学生算法设计超级联赛1
1001 Mod, Or and Everything
打表找规律。将表打出来,然后观察规律。
我们发现,求它二进制最高位下十进制值-1,注意特判整二进制的时候是n/2-1
void work()
{
LL n; cin >> n;
if (n == 1) cout << 0 << endl;
else if ((n & -n) == n) cout << n / 2 - 1 << endl;
else
{
while((n & -n) != n)
{
n -= (n & -n);
}
cout << n - 1 << endl;
}
}
1009 KD-Graph
这题最难的不是做题,而是读题,mmp,题目都读不懂。
给定一个无向无环连通图,将图分成k组,使得每组内,至少有一个顶点,组内相邻两点权值小于等于d,任意两组之间,边权大于d
#include <bits/stdc++.h>
using namespace std;
const int N = 100005, M = 500005;
struct Node{
int x, y, z;
bool operator< (const Node &W) const
{
return z < W.z;
}
}q[M];
int n, m, k;
int fa[N];
int find(int x)
{
return fa[x] == x ? x : fa[x] = find(fa[x]);
}
void merge(int x, int y)
{
x = find(x), y = find(y);
fa[x] = y;
}