第四题是真的离谱.jpg
完全分析不动啊.jpg
前三题倒是蛮愉快的就是了。
C题:
记录一下每个点到1有没有边,到n有没有边。
判一下就好。
#include<bits/stdc++.h>
using namespace std;
int vis1[200010], visn[200010];
int n, m;
inline void ade(int l,int r) {
if(l > r)
swap(l, r);
if(l == 1)
visn[r] = 1;
if(r == n)
vis1[l] = 1;
}
int main() {
scanf("%d%d", &n, &m);
for(int i=1;i<=m;++i) {
int l, r;
scanf("%d%d", &l, &r);
ade(l, r);
}
for(int i=1;i<=n;++i) {
if(vis1[i] && visn[i]) {
printf("POSSIBLE");
return 0;
}
}
printf("IMPOSSIBLE");
return 0;
}
D题:
很自然的想到,让这些值最开始都差不多。
分析了一下发觉,如果每个数字都被操作一遍,那么等于整体-1
正着搞好难搞啊!不如反着来吧。
然后就反着来了,加减换一下。
钦定终态是50个49,然后先看看“大家一起被操作”了多少次,剩下的不超过50次直接大力。
#include<bits/stdc++.h>
using namespace std;
long long val[120];
long long ned, n;
int main() {
scanf("%lld", &ned);
n = 50;
for(int i=1;i<=n;++i)
val[i] = 49;
long long tim = ned / 50;
for(int i=1;i<=n;++i)
val[i] += tim;
for(int T=1;T<=ned%50;++T) {
int miloc = 1;
for(int j=1;j<=n;++j)
if(val[j] < val[miloc])
miloc = j;
for(int j=1;j<=n;++j) {
if(j == miloc)
val[j] += n;
else
val[j] --;
}
}
printf("%lld\n", n);
for(int i=1;i<=n;++i)
printf("%lld ",val[i]);
return 0;
}
E题:
拿到手没什么想法。
想了想发觉一件事:我们其实并不用每次只锤一下最大的那个数字。
我们可以逮着最大数死里锤,把他锤到n以下,然后循环往复,直到最大数小于n。答案不变。
简单证明一下:
对于一个很大的数字,你至少在他身上花费valn\frac{val}{n}nval次,早晚的事儿。既然都是早晚的事儿了,那么晚不如早。
复杂度不知道诶,写了之后手玩了几个样例,发觉跑得飞快,就交上去了。
然后他就过了qwq。
#include<bits/stdc++.h>
using namespace std;
int n;
long long val[120];
priority_queue<long long>sth;
long long det;
long long tim;
int main() {
scanf("%d", &n);
for(int i=1;i<=n;++i)
scanf("%lld",&val[i]), sth.push(val[i]);
while(sth.top() + det >= n) {
long long nw = sth.top() + det;
sth.pop();
long long ned = nw / n;
nw = nw - 1ll * ned * (n + 1);
nw -= det;
tim += ned, det += ned;
sth.push(nw);
}
cout<<tim<<endl;
// while(!sth.empty())
// printf("%lld ",sth.top() + det), sth.pop();
return 0;
}
F题:
这东西是真的分析不动啊!!!!!!!!
看出基环外向树花了两分钟。
看出那玩意是个mex花了十分钟。
分析环上的性质分析到直接去世(弃疗
首先,一个图,弱联通,每个点只有一个入度。
那么你说他不是个基环外向树,还能是个啥qwq。
其次,那个诡异的条件。
“对于每个小于aia_iai的值,都存在他的某个出边指向的点是这个权值”
干嘛要把mex说的那么清新脱俗啊!!!!!!
显然找环,然后对于环上面挂的树,只有一种分配方案,叶节点分0,往上推就好,则环上的每个节点会有一个初始分配到的值。
环上这部分的分析是膜的题解。
考虑啥时候会出事?相邻两个环上节点的初始值相同了,就会出事。
如果是偶环,那么黑白染色一下,如果冲突了,黑点+1,白点不动/减一,肯定不会锅。
如果是奇环(这里就没分析出来了)
考虑是不是所有的初始值都相同。
如果是,没救。
如果不是
这句话我理解了10min。
DalaoNB!(破音
摸鱼人不想写代码.jpg
各位看官自行脑补qwq。