首页 > 其他分享 >【做题记录】csp2025-搜索,折半搜索专题

【做题记录】csp2025-搜索,折半搜索专题

时间:2025-01-17 19:54:06浏览次数:1  
标签:折半 ch int namespace csp2025 long 搜索

A. 「NOIP2009」靶形数独
暴搜。
本着搜索必剪枝的思想,略微做一点优化:优先搜索 \(0\) 少的行。
然后就搜就行。

Code
#include<bits/stdc++.h>
#define ll long long
#define il inline
using namespace std;
namespace asbt{
namespace cplx{bool begin;}
namespace IO{
	const int sz=1<<20;
	char in[sz],*p1=in,*p2=in;
	#define getchar() (p1==p2&&(p2=(p1=in)+fread(in,1,sz,stdin),p1==p2)?EOF:*p1++)
	template<typename T=int>il int read(){
		char ch=getchar();
		while(ch<'0'||ch>'9'){
			ch=getchar();
		}
		T x=0;
		while(ch>='0'&&ch<='9'){
			x=(x<<1)+(x<<3)+(ch^48);
			ch=getchar();
		}
		return x;
	}
	#undef getchar
	char out[1<<20],*p3=out,s[50];
	il int flush(){
		fwrite(out,1,p3-out,stdout);
		p3=out;
		return 0;
	}
	#define putchar(ch) (p3==out+sz&&flush(),*p3++=(ch))
	template<typename T>il void write(T x,bool typ=1){
		int top=0;
		if(x<0){
			putchar('-');
			x=-x;
		}
		do{
			s[++top]=x%10|48;
			x/=10;
		}while(x);
		while(top){
			putchar(s[top--]);
		}
		putchar(typ?'\n':' ');
	}
	#undef putchar
}
using IO::read;
using IO::write;
const int hao[15][15]={{},
{0,1,1,1,2,2,2,3,3,3},
{0,1,1,1,2,2,2,3,3,3},
{0,1,1,1,2,2,2,3,3,3},
{0,4,4,4,5,5,5,6,6,6},
{0,4,4,4,5,5,5,6,6,6},
{0,4,4,4,5,5,5,6,6,6},
{0,7,7,7,8,8,8,9,9,9},
{0,7,7,7,8,8,8,9,9,9},
{0,7,7,7,8,8,8,9,9,9}};
const int sco[15][15]={{},
{0,6,6,6,6,6,6,6,6,6},
{0,6,7,7,7,7,7,7,7,6},
{0,6,7,8,8,8,8,8,7,6},
{0,6,7,8,9,9,9,8,7,6},
{0,6,7,8,9,10,9,8,7,6},
{0,6,7,8,9,9,9,8,7,6},
{0,6,7,8,8,8,8,8,7,6},
{0,6,7,7,7,7,7,7,7,6},
{0,6,6,6,6,6,6,6,6,6}};
int a[15][15],ans=-1;
int p[15],cnt[15],b[105];
bool vis[3][15][15];
il int cal(){
	int res=0;
	for(int i=1;i<=9;i++){
		for(int j=1;j<=9;j++){
			res+=a[i][j]*sco[i][j];
		}
	}
	return res;
}
il void dfs(int u){
	if(u==82){
		ans=max(ans,cal());
		return ;
	}
	int x=b[u]/10,y=b[u]%10;
//	cout<<x<<" "<<y<<"\n";
	if(a[x][y]){
		dfs(u+1);
		return ;
	}
	for(int i=1;i<=9;i++){
		if(!vis[0][x][i]&&!vis[1][y][i]&&!vis[2][hao[x][y]][i]){
			a[x][y]=i;
			vis[0][x][i]=1;
			vis[1][y][i]=1;
			vis[2][hao[x][y]][i]=1;
			dfs(u+1);
			a[x][y]=0;
			vis[0][x][i]=0;
			vis[1][y][i]=0;
			vis[2][hao[x][y]][i]=0;
		}
	}
}
namespace cplx{
	bool end;
	il double usdmem(){return (&begin-&end)/1048576.0;}
}
int main(){
	for(int i=1;i<=9;i++){
		p[i]=i;
		for(int j=1;j<=9;j++){
			a[i][j]=read();
			if(a[i][j]){
				vis[0][i][a[i][j]]=1;
				vis[1][j][a[i][j]]=1;
				vis[2][hao[i][j]][a[i][j]]=1;
			}
			else{
				cnt[i]++;
			}
		}
	}
	sort(p+1,p+10,[](const int &x,const int &y){return cnt[x]<cnt[y];});
	for(int i=1,x,tot=0;i<=9;i++){
		x=p[i];
		for(int y=1;y<=9;y++){
			b[++tot]=x*10+y;
		}
	}
//	for(int i=1;i<=81;i++){
//		cout<<b[i]<<" ";
//	}
//	puts("");
	dfs(1);
	write(ans);
	IO::flush();
	return 0;
}
}
int main(){return asbt::main();}

标签:折半,ch,int,namespace,csp2025,long,搜索
From: https://www.cnblogs.com/zhangxyhp/p/18677585

相关文章

  • 折半搜索(Meet in the Middle)
    折半搜索(MeetintheMiddle)思想先搜索前一半的状态,再搜索后一半的状态,再记录两边状态相结合的答案。一般暴力搜索的时间复杂度是\(O(2^n)\)级别的,但是折半搜索可以将时间复杂度降到\(O(2^{\frac{n}{2}})\)。例题拿题说事儿。[LuoguP4799[CEOI2015Day2]世界冰球锦标赛......
  • CSP2025 - 树形 DP
    CSP2025-树形DPT1「MXOIRound1」城市这个“树上两点距离之和”很典,让我们想到换根DP。首先求出\(\text{siz}_u\)和\(d_u\),分别表示子树\(u\)的大小和子树所有点到\(u\)的距离之和。接下来求出整棵树的所有点到\(\boldsymbolu\)的距离之和。考虑用\(d_u\)......
  • 【LeetCode】力扣刷题热题100道(31-35题)附源码 搜索二维矩阵 岛屿数量 腐烂的橙子 课程
    一、搜索二维矩阵编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。可以使用从右上角开始搜索的方法来有效地找到目标值。选择起始位置:从矩阵的右上角开始。......
  • 热门开源Ai搜索引擎对比分析
    汇总lepton●项目地址:https://github.com/leptonai/search_with_lepton●简介:比较早期的AiSearch,由贾扬清团队项目开源,整个项目含前后端在内仅需不到500行代码。●搜索引擎:支持两种默认搜索引擎:Bing和Google。●LLM:官方提供的API,可自行替换其他厂商API。●其他:提供......
  • automa 使用教程 采集小红书关键词搜索结果
    博主制作的视频教程Automa介绍Automa是一款低代码/无代码的浏览器扩展,用于进行浏览器自动化操作。与手动输入、点击和从网站检索数据相比,Automa将帮助您自动执行所有这些操作。官方仓库:https://github.com/AutomaApp/automa安装Automa在Chrome商店搜索"Automa"并安装......
  • SCSSA-BiLSTM基于改进麻雀搜索算法优化双向长短期记忆网络多特征分类预测Matlab2023b
    SCSSA-BiLSTM基于改进麻雀搜索算法优化双向长短期记忆网络多特征分类预测Matlab2023b%************************************************************************************************************************************************************************......
  • 代码随想录:二叉搜索树的最小绝对值
    遍历二叉搜索树,定义一个全局的上一个节点确实好用/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*TreeNode*right;*TreeNode():val(0),left(nullptr),right(nullptr){}*TreeNode(intx):......
  • 代码随想录:验证二叉搜索树
    二叉搜索树的中序遍历结果是一个递增的数组为了省空间可以用一个变量记录上一次的数字我一开始设置上一次的为null,结果c++中int为null时实际为0,所以要用最小值/***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*......
  • 【搜索】多源BFS专题
    跳马(多源BFS变种,每个起点有步数限制)补充几个测试样例输入32..2...输出0输入3547.484744.7....输出17输入34.....2......输出0输入34.....22.....输出-1本题很坑爹的地方在于,输入的字符串还用空格......
  • 利用Python按关键字搜索阿里巴巴商品:代码示例与实践指南
    在电商领域,能够快速获取商品信息对于市场分析、选品上架、库存管理和价格策略制定等至关重要。阿里巴巴作为全球最大的电商平台之一,提供了丰富的商品数据。虽然阿里巴巴开放平台提供了官方API来获取商品信息,但有时使用爬虫技术来抓取数据也是一种有效的手段。本文将介绍如何利......