首页 > 其他分享 >银河之星(记忆化搜索+9点染色)

银河之星(记忆化搜索+9点染色)

时间:2022-10-25 10:01:36浏览次数:38  
标签:return cout int 染色 else 银河 max include 之星


Problem 3 银河之星(galaxy.cpp/c/pas)

银河之星(记忆化搜索+9点染色)_i++

银河之星(记忆化搜索+9点染色)_#define_02

银河之星(记忆化搜索+9点染色)_#include_03

数据组数不超过10.


这题就是记忆化搜索

9点染色减少状态,map记忆化

b[i][j][k]表示棋子可否从k方向到(i,j)


#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<functional>
#include<iostream>
#include<cmath>
#include<map>
using namespace std;
#define MAXN (100+10)
#define MAXK (10+10)
#define MAXDIV (4)
int k,n,m,x2,y2,a[MAXDIV][MAXDIV],b[MAXDIV][MAXDIV][9];
int c[8][2]={{0,1},{0,2},{1,0},{2,0},{1,1},{2,2},{1,2},{2,1}}; //↑↓→←↗↙↘↖
map<long long,int> h;
bool is_ok()
{
int ans=0;
for (int i=0;i<3;i++)
for (int j=0;j<3;j++)
ans=(11*ans+a[i][j]);
if (h.find(ans)!=h.end()) return 0;
return h[ans]=1;
}
bool dfs(int x)
{
/*
for (int j=3;j;j--)
{
for (int i=1;i<=3;i++)
cout<<a[i%3][j%3];
cout<<endl;
}
cout<<endl;
*/
if (!is_ok()) return 0;
if (x==1)
{
if (a[x2][y2]) return 1;
else return 0;
}
for (int i=0;i<3;i++)
for (int j=0;j<3;j++)
if (a[i][j])
{
for (int l=0;l<8;l++)
if (a[(i+c[l][0])%3][(j+c[l][1])%3]&&a[(i+2*c[l][0])%3][(j+2*c[l][1])%3]<b[(i+2*c[l][0])%3][(j+2*c[l][1])%3][l])
{
a[i][j]--;a[(i+c[l][0])%3][(j+c[l][1])%3]--;a[(i+2*c[l][0])%3][(j+2*c[l][1])%3]++;
if (dfs(x-1)) return 1;
a[i][j]++;a[(i+c[l][0])%3][(j+c[l][1])%3]++;a[(i+2*c[l][0])%3][(j+2*c[l][1])%3]--;

}
}
return 0;
}
int main()
{
freopen("galaxy.in","r",stdin);
freopen("galaxy.out","w",stdout);
while (scanf("%d%d%d%d%d",&k,&n,&m,&x2,&y2)!=EOF)
{
x2%=3;y2%=3;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for (int i=0;i<3;i++)
for (int j=0;j<3;j++)
{
int h=((n/3)+(i>0)*(i<=n%3)),r=((m/3)+(j>0)*(j<=m%3));
//b[i][j][8]=((n/3)+(i>0)*(i<=n%3))*((m/3)+(j>0)*(j<=m%3));
b[i][j][8]=h*r;
if (j!=0) b[i][j][0]=max(r-1,0)*h;else b[i][j][0]=r*h;
if ((m+1)%3!=j) b[i][j][1]=max(r-1,0)*h;else b[i][j][1]=r*h;
if (i!=0) b[i][j][2]=max(h-1,0)*r;else b[i][j][2]=r*h;
if ((n+1)%3!=i) b[i][j][3]=max(h-1,0)*r;else b[i][j][3]=r*h;
b[i][j][4]=max(r-(j!=0),0)*max(h-(i!=0),0);
b[i][j][5]=max(r-((m+1)%3!=j),0)*max(h-((n+1)%3!=i),0);
b[i][j][6]=max(r-((m+1)%3!=j),0)*max(h-(i!=0),0);
b[i][j][7]=max(r-(j!=0),0)*max(h-((n+1)%3!=i),0);
}

for (int i=1;i<=k;i++)
{
int x,y;
scanf("%d%d",&x,&y);
a[x%3][y%3]++;
}
/*
for (int j=3;j;j--)
{
for (int i=1;i<=3;i++)
cout<<a[i%3][j%3];
cout<<endl;
}
cout<<endl;
*/
if (dfs(k)) cout<<"Yes\n";
else cout<<"No\n";
h.clear();
}
return 0;
}





标签:return,cout,int,染色,else,银河,max,include,之星
From: https://blog.51cto.com/u_15724837/5794018

相关文章

  • 银河麒麟安装nmon以及rpc.rstatd的方法
    银河麒麟安装nmon以及rpc.rstatd的方法 背景说明随着公司业务的发展,需要在ARM环境上面进行性能测试.为了进行ARM环境的验证,需要一些组件进行资料收集.比较好的......
  • 银河麒麟服务器操作系统目录、文件显示颜色的设置生效
    拷贝/etc/DIR_COLORS文件为当前主目录的.dir_colors命令:cp/etc/DIR_COLORS~/.dir_colors修改~/.dir_colors中DIR对应的颜色vim~/.dir_colors找到下面这一行:DIR01;......
  • 国产Linux系统-银河麒麟Kylin系统安装
    尝试安装体验国产Linux系统-银河麒麟Kylin系统原创 X 自主可控 2022-05-1717:25 发表于四川银河麒麟操作系统V10版本是一款国产的电脑操作系统,具备高安全、高......
  • [JSOI2015]染色问题
    P6076JSOI2015染色问题也是BZOJ4497容斥原理:将条件容斥第一步:先处理掉至少用一种颜色的:设f[i]表示用至多i种颜色,每行每列都染色的格子的方案数/答案为(-......
  • XCTF---MISC---来自银河的信号
    XCTF---MISC---来自银河的信号 flag:flag{M00nc@ke_Fes7iva1_15_Coming!}解题步骤: 1、观察题目,下载附件,了解题目内容2、根据描述,是一段音频文件,有可能是音频隐写,把......
  • 银河麒麟os V10-SP1使用记录
    >cat/etc/kylin-buildKylin-DesktopV10-SP1Build20220316>cat/etc/.kyinfo[dist]name=Kylinmilestone=Desktop-V10-SP1-General-RC6-Build21-2203arch=arm64......
  • 基因组组装: 3D-DNA 染色体挂载
    导读本文将介绍基因组组装过程中,如何利用HiC测序数据,进行染色体级别基因组的组装。该过程主要利用Juicer和3D-DNA进行,有关第一步Juicer的过程,已经下方的文章中介绍了,......
  • 洛谷 P1506 拯救oibh总部(DFS / 染色法)
    https://www.luogu.com.cn/problem/P1506题目描述给定n*m的图形,由*和0组成。让我们求出被*四面包围了的0的数量。输入#1450000000*000*0*000*00输出......
  • Q3.1.1.4. 边的染色
    Q3.1.1.4.边的染色题目描述给一个允许有重边和自环的无向图,你需要将每条边染色成红色或蓝色,使得所有度数的点,都既与一条蓝色边相连,又与一条红色边相连。问是否有解,有......
  • 银河麒麟操作系统root用户登录图形化界面
    第一步、为root用户设置密码sudopasswd设置root用户密码第二步、开启root登录权限vim/usr/share/lightdm/lightdm.conf.d/60-kylin.conf,加入greeter-show-manual-lo......