首页 > 其他分享 >3 Split

3 Split

时间:2024-09-08 22:14:32浏览次数:7  
标签:opt int 赛场 枚举 Split 505

  • 赛场上想到了n方枚举n方检验的4方做法,提前想好了实现细节一点点实现,最后一遍过了样例,还是很感动的
  • 赛场上超时了,但是交到Codeforces上能以900ms通过
  • 正解的确是n^3的,考虑优化枚举,确定1号节点在A后,对于每个1->x->y->1的三元环,要么x在B,y在C,要么x,y都在A,无论如何,x和y都不用被访问第二遍
点击查看代码
#include <bits/stdc++.h>
using namespace std;
bool e[505][505],v[505];
vector<int>c[3];
int p[3],n;
void pr(int p)
{
	cout<<c[p][0];
	for(int i=1;i<c[p].size();i++)
	{
		cout<<' '<<c[p][i];
	}
	cout<<endl;
}
void shuchu()
{
	cout<<c[0].size()<<' '<<c[1].size()<<' '<<c[2].size()<<endl;
	pr(0);
	pr(1);
	pr(2);
}
bool check()
{
	for(int i=0;i<3;i++)
	{
		int j=(i+1)%3;
		for(int k=0;k<c[i].size();k++)
		{
			for(int l=0;l<c[j].size();l++)
			{
				if(!e[c[i][k]][c[j][l]])
				{
					return false;
				}
			}
		}
	}
	return true;
}
int getin(int id)
{
	for(int i=0;i<3;i++)
	{
		if(e[id][p[i]])
		{
			return i;
		}
	}
}
int getout(int id)
{
	for(int i=0;i<3;i++)
	{
		if(e[p[i]][id])
		{
			return i;
		}
	}
}
bool pd()
{
	for(int i=1;i<=n;i++)
	{
		if(i!=p[0]&&i!=p[1]&&i!=p[2])
		{
			int tot=e[p[0]][i]+e[p[1]][i]+e[p[2]][i];
			if(tot==0||tot==3)
			{
				return false;
			}
			else if(tot==1)
			{
				int t=getout(i);
				c[(t+1)%3].push_back(i);
			}
			else
			{
				int t=getin(i);
				c[(t+2)%3].push_back(i);
			}
		}
	}
	return check();
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			int opt;
			cin>>opt;
			if(opt)
			{
				e[i][j]=1;
			}
			else
			{
				e[j][i]=1;
			}
		}
	}
	p[0]=1;
	for(int i=2;i<=n;i++)
	{
		if(!v[i])
		{
			p[1]=i;
			for(int j=2;j<=n;j++)
			{
				if(!v[j])
				{
					p[2]=j;
					if(j!=i)
					{
						if(e[p[0]][p[1]]&&e[p[1]][p[2]]&&e[p[2]][p[0]])
						{
							v[i]=v[j]=true;
							c[0].clear();c[0].push_back(1);
							c[1].clear();c[1].push_back(i);
							c[2].clear();c[2].push_back(j);
							if(pd())
							{
								shuchu();
								return 0;
							}
						}
					}
				}
			}	
		}
	}
	cout<<0<<" "<<0<<" "<<0<<endl;
	return 0;
}

标签:opt,int,赛场,枚举,Split,505
From: https://www.cnblogs.com/watersail/p/18403602

相关文章

  • Latex 两版排版下的长公式换行(equation & split)
    举例:二元高斯分布的密度函数(\(X\),\(Y\)不独立)\(f_{X,Y}\left(x,y\right)=\frac{1}{2\pi\sigma_{x}\sigma_{y}\sqrt{1-\rho^2}}\exp\left(-\frac{1}{2(1-\rho)^2}\left[\frac{(x-\mu_{x})^2}{\sigma_{x}^2}-2\rho\frac{(x-\mu_{x})(t-\mu_{y})}{\sigma_{x}\si......
  • 细说TimeSeriesSplit​​​ 的 ​​train_index​​​ 和 ​​valid_index​
    在时间序列数据中,TimeSeriesSplit的train_index和valid_index的矩阵元素数量由以下几个因素决定:时间序列的总长度(n_samples):即整个数据集的样本数量。train_index和valid_index会从中划分出不同的数据块。划分的次数(n_splits):定义了交叉验证要进行多少次切分。在每次切......
  • Shell编程:文本处理器(cut、split、paste、eval 命令)
    文章目录文本处理器2cut命令-快速裁剪语法格式常用选项示例split命令-文件拆分语法格式常用选项示例paste命令-文件合并语法格式常用选项示例eval命令-变量扫描器工作原理示例文本处理器2本章讲解grep、sort、uniq、tr、cut、split、paste命令等。这......
  • 字符串行转列 regexp_split_to_table
    在Greenplum数据库中,regexp_split_to_table是一个非常有用的函数,它允许你根据正则表达式将字符串分割成多个部分,并将这些部分作为表中的行返回。这个函数在处理文本数据时特别有用,尤其是当你需要将一个字段中的复合数据分解为独立的元素时。语法regexp_split_to_table(str......
  • SQLServer2017对象名STRING_SPLIT无效
    SQLServer2017在使用“STRING_SPLIT”方法时报错:  1select*fromSTRING_SPLIT('1,2,3,4,5',',')  12消息208,级别16,状态1,第3行对象名'STRING_SPLIT'无效。原因STRING_SPLIT方法要求数据库的兼容级别至少为130。当级别小于130时,SQ......
  • [ARC173F] Select and Split
    MyBlogs[ARC173F]SelectandSplit在Kevin题解的基础上解释了一下。分裂这个过程感觉很不自然,考虑倒过来做合并。经过简单的观察,可以发现一个集合的属性只和在\([1,A]\)内的元素个数和\([A+1,A+B]\)内的元素个数有关,分别设其为\(a_i,b_i\)。合并两个点的方案数是\(a......
  • C# split big file into small files as, and merge the small files into big one
    namespaceConsoleApp59{internalclassProgram{staticstringpath=System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);staticvoidMain(string[]args){stringfilePa......
  • WPF C# split picture into small pieces and show in grid cells
    usingSystem;usingSystem.Collections.Generic;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;using......
  • C# split big picture into small pieces via graphics
    usingSystem;usingSystem.Collections.Generic;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;using......
  • C. Splitting Items
    https://codeforces.com/contest/2004/problem/C总结:一开始看错题了,思维惯性的认为alice会拿前一半大的元素,bob会拿后一半大的元素。。其实不是,而是每个人都挑最大的拿voidsolve(){intn,k;cin>>n>>k;vector<int>a(n);for(auto&x:a){......