ARC079简要题解

第四题是真的离谱.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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值