首页 > 其他分享 >AT_abc302_c

AT_abc302_c

时间:2024-01-20 18:11:25浏览次数:18  
标签:le int dfs abc302 pd 字符串 101

题意

有 \(n\) 个字符串,它们的长度都为 \(m\)。问能否通过改变它们的顺序,使得后一个字符串能由前一个字符串只改变一个字母而得到?

思路

本题数据范围 $ 2 \le N \le 8 $,非常小,因此可以考虑全排列枚举所有的情况,最后检验是否存在符合要求的顺序即可。

代码如下:

#include <iostream>
#include <cstdio>

using namespace std;

string s[101],c[101];
int a[101],n,m,pd;

void dfs( int k )
{
	for( int i = 1 ; i <= n ; i ++ )
	{
		if( a[i] == 0 )
		{
			a[i] = 1;
			c[k] = s[i];
			if( k == n )
			{
				int fg = 0,cnt = 0;
				for( int j = 1 ; j < n ; j ++ )
				{
					cnt = 0;
					for( int k = 0 ; k < m ; k ++ )
						if( c[j][k] != c[j + 1][k] )
							cnt ++;
					if( cnt != 1) fg = 1;
				}
				if( !fg ) pd = 1;
			}
			else dfs( k + 1 );
			a[i] = 0;
			c[k] = "";
		}
	}
}

int main()
{
	cin >> n >> m;
	for( int i = 1 ; i <= n ; i ++ )
		cin >> s[i];
	dfs(1);
	if( pd ) cout << "Yes";
	else cout << "No";
	return 0;
}

标签:le,int,dfs,abc302,pd,字符串,101
From: https://www.cnblogs.com/-lilong-/p/17976896

相关文章

  • AT_abc302_e
    题意给定一个有\(n\)个点的无向图。初始没有任何边。接下来有\(q\)次操作,分为\(2\)种类型:1uv:连接\(u\)和\(v\),保证没有重边、自环。2v:删除连接\(v\)的所有边。每次操作后,输出没有连接其它任何点的点的数量(即度数为\(0\)的点的数量)。思路看到操作次......
  • [abc302f] Merge Set
    F-MergeSet显然要建图首先,我们有一个粗略的想法,对于同一集合\(S_i\)内的元素,\(S_{i,j}\)与\(S_{i,j+1}\)间连一条无向的标号为\(i\)的边那么题目显然是要我们跑最短路,若到达\(x\)的边为\(i\),然后从\(x\)向外走到点\(y\),走的边若还为\(i\),那么代价为\(0\),否则代价为\(1\)也......
  • ABC302Ex Ball Collector 题解
    注意到当有那些\((a_i,b_i)\)是确定的时,答案就是将\((a_i,b_i)\)连边后每个连通块的\(\min(|V|,|E|)\)之和。那么这个东西用可撤销并查集维护即可。#include<algorithm>#include<cstdio>usingnamespacestd;constintN=2e5;structEdge{intto,nxt;}e[......
  • [ABC302G]
    [ABC302G]Sortfrom1to4一道简单的性质分析题。考虑到这个数列只有\([1,4]\)的数,就可以考虑有哪几种交换方案。我们先统计出\(t[i][j]\)表示应该填\(i\)但是填了\(j\)的位置,注意\(i=j\)时\(t[i][j]=0\)。交换两个数,例如\(t[1][2],t[2][1]\),代价为\(1\),恢复......
  • [ABC302F]MergeSet
    AGC010BBoxes这道题其实是一道01BFS求最短路的模型,但是建模比较难想。首先需要想到对于每个集合内的点两两连边,边权为\(1\),由于开始和结束时需要从起点到中转点和中转点到终点,而我们要求的其实是中转点的数量,如果我们直接求一遍最短路(这样的话用的是普通bfs),中准点之间是an......
  • Atcoder Beginner Contest ABC302 题解
    代码见此:https://atcoder.jp/contests/abc302/submissions?f.Task=&f.LanguageName=&f.Status=&f.User=frequenter。AAttackhttps://atcoder.jp/contests/abc302/tasks/abc302_a直接计算a/b,有余数的话答案加一。BFindSnukehttps://atcoder.jp/contests/abc302/tasks/abc......
  • 【题解】Atcoder ABC302 F,G,Ex
    完全不会G和Ex,这些套路还是要积累一下的。F.MergeSet题目描述:给定\(n\)个集合,每次可以合并两个有交的集合,问最少多少次合并可以让\(1\)和\(m\)位于同一个集合中。题目分析:一开始将题读成了将\([1,m]\)位于同一个集合中,然后就感觉这个题相当不可做。因为集合的元......
  • abc302 题解
    打的还行,加的分不多。A直接除完上取整即可。#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=1e5+5,INF=0x3f3f3f3f;constLLmod=1e9+7;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr); LLa,b; ci......