首页 > 其他分享 >暑假集训D3 2023.7.26 补题

暑假集训D3 2023.7.26 补题

时间:2023-07-26 17:35:12浏览次数:56  
标签:26 cout int step 补题 字符串 include D3

G. P6183 [USACO10MAR] The Rock Game S

题意:给定长度 n ,构造\(2^n\)个由X和O组成的字符串,使得第一个字符串和最后一个字符串只由O组成,并且相邻的字符串只有一处不同,不得有重复的字符串.

BFS貌似做不了.

看题解有佬用格雷码的知识.
image
image

代码如下

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#define endl '\n'
using namespace std;
const int N = 1e5+10;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int n;
	cin>>n;
	for(int i =0;i<pow(2,n);i++)
	{
		int num = 0;
		for(int j = n-1;j>=0;j--)
		{
			num<<=1;
			num|=((i>>(j))^(i>>(j+1)));
			if(num&1)
			{
				cout<<'X';
			}
			else cout<<'O';
		}
		cout<<endl;
		
	}
	for(int i=0;i<n;i++)
	{
		cout<<"O";
	}
	
	return 0;
}

这题dfs当然也能做,不过当时做的时候T了image
就没再往这方面想.
后面补题的时候发现应该是字符串比较的时候太费时间了.
我是用字符串来记录状态的,感觉时间应该差不多.
但是用二进制压缩一下状态可以大大加快比较的时间.
image
TLE代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#define endl '\n'
using namespace std;
const int N = 1e5+10;
int n;
unordered_map<string,int> vis;
int m_step ;
string start ;
vector<string>res(32769);

int dfs(string s,int step)
{
	//cout<<s<<endl;
	if(step==m_step)
	{
		if(res[step-1]==start)
		return 1;
		else return 0;
	}
	string t = s;
	for(int i =0;i<n;i++)
	{
		if(t[i]=='O')
		{
			t[i] = 'X';
		}
		else t[i]='O';
		if(t==start&&step<m_step-1)
		{
			continue;
		}
		if(!vis[t])
		{
			vis[t] =1;
			res[step] =t;
			if(dfs(t,step+1))
			{
				return 1;
			}
			
			vis[t] =0;
		}
		
		if(t[i]=='O')
		{
			t[i] = 'X';
		}
		else t[i]='O';
	}
	
	return 0;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	
	cin>>n;
	m_step = pow(2,n);
	
	string s ;
	for(int i=0;i<n;i++)s+='O';
	start =s;
	if(dfs(s,0))
	{
		//cout<<"yes"<<endl;
	}
	cout<<start<<endl;
	for(int i=0;i<m_step;i++)
	{
		cout<<res[i]<<endl;
	}
	return 0;
}

用二进制压缩以后完美通过代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#define endl '\n'
using namespace std;
const int N = 1e5 + 10;
int n;
int vis[N];

int m_step ;
int res[N];
int print(int x)
{
	for (int i = 0; i < n; i++)
	{
		if ((x >> (n - i - 1))&1)cout << "X";
		else cout << "O";
	}
	cout << endl;
	return 0;
}
int dfs(int st, int step)
{
	//cout<<s<<endl;
	//cout<<step<<":";
	//print(st);
	if (!st && step == m_step)
	{
		return 1;
	}

	for (int i = 0; i < n; i++)
	{
		int t = st;
		t ^= (1 << i);

		if (!vis[t])
		{
			vis[t] = 1;
			res[step] = t;
			if(t !=0||step==m_step-1)
			{
				if(dfs(t, step + 1))
				{
					return 1;
				}
			}
			vis[t] = 0;
		}

	}
	return 0;
}
int main()
{
//	ios::sync_with_stdio(false);
//	cin.tie(0);

	cin >> n;
	m_step = pow(2, n);

	if(!dfs(0, 0))
	{
		cout<<"error"<<endl;
	}
	for(int i=0;i<n;i++)
	{
		cout<<"O";
	}
	cout<<endl;
	for(int i =0;i<m_step;i++)
	{
		print(res[i]);
	}
	return 0;
}

以后也应该注意到,这种数据范围非常小的应该优先考虑深搜.之前蓝桥杯飞机那道题也是类似的.

标签:26,cout,int,step,补题,字符串,include,D3
From: https://www.cnblogs.com/oijueshi/p/17583096.html

相关文章

  • 7/26
    问题B:最优乘车#include<bits/stdc++.h>usingnamespacestd;intm,n,vis[501];vector<int>g[501];intst;voidbfs(){queue<int>q;while(!q.empty())q.pop();q.push(1);vis[1]=0;while(!q.empty()){inth=q.front()......
  • 20230726
    复赛完全背包定义:有n种物品和一个容量为v的背包,第i种物品体积为c[i],价值为w[i],每种物品有无穷件,问如何选取物品放入背包,可使价值总和最大。与01背包的区别:01背包一个物品只能选一件,而完全背包一个物品可以选多件例题时间:1s空间:128M题目描述:一个旅行者有一个最......
  • 2023-7-26 Dynamic替代部分反射的简单实现方式
    Dynamic与反射的使用【作者】长生实体类publicclassSchool{ publicintGetAge(){ return100;}}使用反射获取对象里的方法 Schoolschool=newSchool(); varmethod=typeof(School).GetMethod("GetAge"); intage=(int)method.Invoke(school,null); Console.W......
  • Day16(2023.07.26)
    行程9:00 到达上海市徐汇区宛平南路1099号城建大厦9:45  与客户进行漏扫方面交流11:30--13:00   吃饭休息13:30         管理方面交流16:30         下班......
  • hls协议下支持h.265视频web/H5播放方案
    一般我们播放本地视频都是使用video标签,但是<video>元素只支持三种视频格式:MP4、WebM、Ogg,对于在线视频直接使用video是没法播放的,这里介绍一款做播放在线监控视频功能时使用过的一款播放器。先介绍几个概念:流协议:流协议就是在两个通信系统之间传输多媒体文件的一套规则,它定义了......
  • 【2023-07-26】要有目标跟着走
    20:00千万别嘲笑一个人的理想,哪怕它像一棵弱小而丑陋的树苗,但无论土层有多厚,压住它的石块有多重,只要它女里的方向正确,那么它的未来就是光明的。                                         ......
  • 数据复制区分-7.26
    浅拷贝和深拷贝,浅克隆和深克隆在绝大多数情况下是同一概念。浅克隆和浅拷贝都指的是对象的浅复制操作,只复制对象的引用而不复制内部包含的其他对象。产生的各种误解多是对数据存储区域的划分和国内教材对指针和引用这里垃圾概念的提出。java中有基本数据类型和引用数据类型,基本......
  • 逆袭!裸辞26天,历经4面,60w“跳”进鹅厂(附面试流程和真题)
    在互联网做了几年之后,去大厂“镀镀金”是大部分人的首选。大厂不仅待遇高、福利好,更重要的是,它是对你专业能力的背书,大厂工作背景多少会给你的简历增加几分竞争力。但说实话,想进大厂还真没那么容易。我的一个朋友在入职腾讯之前,大大小小的面试经历了十几次,最后终于在4轮技术面+1......
  • H265格式兼容各个浏览器网页web端H5播放方案
    可能有很多朋友会遇到H265格式的视频流无法播放,毕竟现在很多相机都支持h265了,确实有很多优点,但是它最大的问题就是很多浏览器无法播放,也有部分浏览器能够兼容h265,但是总不能让用户指定浏览器使用吧,下面来说说怎么兼容各个浏览器播放无非两种方案,第一种就是使用ffmpeg进行转码,这种方......
  • 7.26 day3图论
    战绩:100+100+90+25=315rk2(如果T3不挂10分就rk1了)T1正解用的是状态之间建边跑bfs,赛时我没想到状态之间建边,糊了个费用流,同样能过,思路也很简单,直接网格之间建费用为1流量无限的边,在控制点和解密点限制一下流量即可T2二分答案+最小生成树检验注意可能爆longlong要边加边判......