[NOIP2004][CODEVS1064]虫食算(搜索||高斯消元)
来源:互联网 发布:手机淘宝扫码 编辑:程序博客网 时间:2024/06/06 01:03
题目描述
传送门
题解
一看这就是爆搜题嘛,据说有人说高斯消元才是正解戳这里
但是这个爆搜的技巧还是很多的,让我学到了有用的东西:
①每搜出来一个数都要判断是否合法。这样看起来每次都要
②判断合法的方式提醒我们,对于每一项,ABC知道得越多越容易被剪枝。那么可以改变搜索的顺序,按照字母从右往左出现的顺序搜索。这个效果也非常明显。
③填数的时候倒序搜比正序搜要快很多。why?
代码
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;char a[30],b[30],c[30],s[100];int n,len,ans[30];bool vis[30];bool check(){ int last=0,aa,bb,cc; for (int i=n-1;i>=0;--i) { aa=ans[a[i]-'A'+1],bb=ans[b[i]-'A'+1],cc=ans[c[i]-'A'+1]; if (aa==-1||bb==-1||cc==-1) {last=-1;continue;} if (last==-1) { if ((aa+bb)%n!=cc&&(aa+bb+1)%n!=cc) return false; } else { if ((aa+bb+last)%n!=cc) return false; last=(aa+bb+last)/n; } } if (last!=-1&&last!=0) return false; return true;}void dfs(int dep){ if (dep==len+1) { if (check()) { for (int i=1;i<=n;++i) printf("%d%c",ans[i]," \n"[i==n]); exit(0); } return; } int now=s[dep]-'A'+1; if (ans[now]!=-1) dfs(dep+1); else for (int i=n-1;i>=0;--i) if (!vis[i]) { ans[now]=i; vis[i]=true; if (check()) dfs(dep+1); ans[now]=-1; vis[i]=false; }}int main(){ scanf("%d\n",&n); gets(a); gets(b); gets(c); for (int i=n-1;i>=0;--i) { if (!vis[a[i]-'A'+1]) vis[a[i]-'A'+1]=true,s[++len]=a[i]; if (!vis[b[i]-'A'+1]) vis[b[i]-'A'+1]=true,s[++len]=b[i]; if (!vis[c[i]-'A'+1]) vis[c[i]-'A'+1]=true,s[++len]=c[i]; } memset(ans,-1,sizeof(ans)); memset(vis,0,sizeof(vis)); dfs(1);}
总结
①分析性质!分析性质!分析性质!非常重要!!!
0 0
- [NOIP2004][CODEVS1064]虫食算(搜索||高斯消元)
- 【NOIP2004】虫食算(搜索+高斯消元)
- [NOIP2004]虫食算 - 高斯消元|搜索
- [NOIP2004]虫食算【搜索】
- 【搜索】[NOIP2004]虫食算
- 【NOIP2004】虫食算 搜索+剪枝
- 【搜索】【NOIP2004】虫食算
- 【搜索】Codevs1064虫食算NOIP提高组2005T4
- |洛谷|NOIP2004|搜索|P1092 虫食算
- codevs1064
- [NOIP2004]虫食算 高斯消元
- 【NOIP2004】虫食算(暴力)
- 【搜索】【NOIP2004提高组】四、虫食算
- [NOIP2004]虫食算 T4 简单搜索+剪枝
- 【NOIP2004提高组T4】虫食算-搜索剪枝
- NOIP2004虫食算
- NOIP2004 虫食算
- 【NOIP2004】虫食算
- oracle数据库创建、删除表空间
- 【第四周 项目2-长方形周长和面积】
- Express中的res.locals这个方法一般用在哪些场景中?
- 优化UITableViewCell高度计算的那些事
- AS中第三方库类导入和问题
- [NOIP2004][CODEVS1064]虫食算(搜索||高斯消元)
- 每个数均可表示成若干个完全平方数(1,4,9,16,25……)之和
- 第四周 项目3-3
- sockets 创建步骤
- 第四周项目六
- System.currentTimeMillis()
- 第四周项目3(2)-连接
- 初次使用git
- 软件测试