栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

CF819E Mister B and Flight to the Moon

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CF819E Mister B and Flight to the Moon

CF819E Mister B and Flight to the Moon

题目传送门
思路:
构造乱搞题……
对于已经有 n n n 个点无向完全图,我们考虑最后加入的两个点 u u u 和 v v v 会连出什么类型的边。

  1. ∀ i ∈ [ 1 , n − 2 ] , ∃ u ↔ i forall iin[1,n-2],exists uleftrightarrow i ∀i∈[1,n−2],∃u↔i
  2. ∀ i ∈ [ 1 , n − 2 ] , ∃ i ↔ v forall iin[1,n-2],exists ileftrightarrow v ∀i∈[1,n−2],∃i↔v
  3. u ↔ v uleftrightarrow v u↔v

对于 n = 4 n=4 n=4 和 n = 3 n=3 n=3 的情况,我们可以打表。
然后我们考虑由 n − 2 n-2 n−2 构造 n n n 的答案:
n为奇数:
我们先把 n − 1 n-1 n−1 向 ∀ i ∈ [ 1 , n − 4 ] forall iin[1,n-4] ∀i∈[1,n−4] 连一次,再向 ∀ i ∈ [ 1 , n − 3 ] forall iin[1,n-3] ∀i∈[1,n−3] 连一次。
然后对 n n n 进行同样操作,这样 n , n − 1 n,n-1 n,n−1 和 ∀ i ∈ [ 1 , n − 3 ] forall iin[1,n-3] ∀i∈[1,n−3] 就会构成 n − 3 2 frac{n-3}{2} 2n−3​ 个四元环,符合题意。
最后再把三元环 ( n − 2 , n − 1 , n ) (n-2,n-1,n) (n−2,n−1,n) 连两遍就好啦!
n为偶数:
我们先把 n − 1 n-1 n−1 向 ∀ i ∈ [ 1 , n − 5 ] forall iin[1,n-5] ∀i∈[1,n−5] 连一次,再向 ∀ i ∈ [ 1 , n − 4 ] forall iin[1,n-4] ∀i∈[1,n−4] 连一次。
然后对 n n n 进行同样操作,这样 n , n − 1 n,n-1 n,n−1 和 ∀ i ∈ [ 1 , n − 4 ] forall iin[1,n-4] ∀i∈[1,n−4] 就会构成 n − 4 2 frac{n-4}{2} 2n−4​ 个四元环,符合题意。
这是从上面复制的
最后再把三元环 ( n − 3 , n − 1 , n ) , ( n − 2 , n − 1 , n ) (n-3,n-1,n),(n-2,n-1,n) (n−3,n−1,n),(n−2,n−1,n) 和四元环 ( n − 3 , n − 2 , n − 1 , n ) (n-3,n-2,n-1,n) (n−3,n−2,n−1,n) 连两遍就好啦!
代码:

#include
#define freo(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout)
#define ll long long
#define id(i,j) ((i-1)*d+j)
using namespace std;
const int maxn=305*305;
int a[maxn],b[maxn],c[maxn],d[maxn],ecnt,num[maxn];
inline ll read()
{
	ll ret=0;char ch=' ',c=getchar();
	while(!(c<='9'&&c>='0')) ch=c,c=getchar();
	while(c<='9'&&c>='0') ret=(ret<<1)+(ret<<3)+c-'0',c=getchar();
	return ch=='-'?-ret:ret;
}
void add(int x,int y,int z) {a[++ecnt]=x,b[ecnt]=y,c[ecnt]=z;num[ecnt]=3;}
void add(int x,int y,int z,int q) {a[++ecnt]=x,b[ecnt]=y,c[ecnt]=z,d[ecnt]=q;num[ecnt]=4;}
void work(int x)
{
	if(x==1) return;
	if(x==4) {add(1,2,3);add(2,3,4);add(3,4,1);add(4,1,2);return;}
	if(x&1)
	{
		for(int i=1;i<=x-3;i+=2) add(i,x-1,i+1,x),add(i,x-1,i+1,x);
		add(x-2,x-1,x);add(x-2,x-1,x);
		work(x-2);
	}
	else 
	{
		for(int i=1;i<=x-4;i+=2) add(i,x-1,i+1,x),add(i,x-1,i+1,x);
		add(x-3,x-1,x);add(x-2,x-1,x);add(x-3,x-1,x-2,x);
		work(x-2);
	}
}
int main()
{
	int n=read();
	work(n);
	printf("%dn",ecnt);
	for(int i=1;i<=ecnt;i++)
	{
		printf("%d ",num[i]);
		if(num[i]==3) printf("%d %d %dn",a[i],b[i],c[i]);
		else printf("%d %d %d %dn",a[i],b[i],c[i],d[i]);
	}
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/513172.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号