noi题库c语言 1.5答案,NOIP2004提高组复赛试题答案c语言版
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
bool finish, hash[256], used[27];
int n, stk[27];
string a, b, c;
string word;
void init() {
fin >> n >> a >> b >> c;
finish = false;
}
void outsol() {
int i, ans[27];
for (i = 0; i
ans[word[i] - 65] = stk[i];
fout <
for (i = 1; i
fout <
fout <
finish = true;
}
void addup(char ch) {
if (!hash[ch]) {
hash[ch] = true;
word = word + ch;
}
}
string change(string str, char x, char y) {
for (int i = 0; i
if (str[i] == x)
str[i] = y;
return str;
}
void pre_doing() {
word = "";
memset(hash, 0, sizeof(hash));
for (int i = n - 1; i >= 0; i --) {
addup(a[i]); addup(b[i]); addup(c[i]);
}
memset(used, 0, sizeof(used));
}
bool bad() {
int p, g = 0;
for (int i = n - 1; i >= 0; i --) {
if (a[i] >= n || b[i] >= n || c[i] >= n) return false;
p = a[i] + b[i] + g;
if (p % n != c[i]) return true;
g = p / n;
p %= n;
}
return false;
}
bool modcheck() {
int i, p, p1, p2, g = 0;
//a + b = c, all know
for (i = n - 1; i >= 0; i --) {
if (a[i] >= n || b[i] >= n || c[i] >= n) continue;
p = (a[i] + b[i]) % n;
if (!(p == c[i] || (p + 1) % n == c[i])) return true;
}
//a + ? = c
for (i = n - 1; i >= 0; i --) {
if (!(a[i] = n)) continue;
p1 = (c[i] - a[i] + n) % n;
p2 = (p1 - 1) % n;
if (used[p1] && used[p2]) return true;
}
//? + b = c
for (i = n - 1; i >= 0; i --) {
if (!(a[i] >= n && c[i]
p1 = (c[i] - b[i] + n) % n;
p2 = (p1 - 1) % n;
if (used[p1] && used[p2]) return true;
}
//a + b = ?
for (i = n - 1; i >= 0; i --) {
if (!(a[i] = n)) continue;
p1 = (a[i] + b[i]) % n;
p2 = (p1 + 1) % n;
if (used[p1] && used[p2]) return true;
}
return false;
}
void dfs(int l) {
int i;
string A, B, C;
if (finish) return;
if (bad()) return;
if (modcheck()) return;
if (l == n) {
outsol();
return;
}
for (i = n - 1; i >= 0; i --)
if (!used[i]) {
used[i] = true; A = a; B = b; C = c;
a = change(A, word[l], i);
b = change(B, word[l], i);
c = change(C, word[l], i);
stk[l] = i;
dfs(l + 1);
used[i] = false; a = A; b = B; c = C;
}
}
int main() {
init();
pre_doing();
dfs(0);
return 0;
}
搜索题的框架往往不难找到,关键就是在搜索的优化上,本文的主要篇幅也就是讨论了几种有效的优化。搜索问题的优化更多的需要选手的经验和思考、分析问题的能力,所以搜索剪枝也是竞赛中经久不衰的经典问题�
noi题库c语言 1.5答案,NOIP2004提高组复赛试题答案c语言版相关推荐
- NOI题库 scratch题解(部分)
1.3编程基础之算术表达式与顺序执行 01 A+B问题 1.3编程基础之算术表达式与顺序执行 01 A+B问题_dllglvzhenfeng的博客-CSDN博客 1.3编程基础之算术表达式与顺序执行 ...
- NOI题库 python题解-2022.01.07整理(1.4-1.7)
python && C++ NOI编程题解1.4 https://blog.csdn.net/yigezzchengxuyuan/article/details/86651658 ht ...
- OpenJudge NOI题库 1.1 编程基础之输入输出
OpenJudge NOI题库 1.1编程基础之输入输出 OpenJudge - OpenJudge - 题目 1.1_01:Hello, World!_2017-03-19(C++语言) 1.1_0 ...
- OpenJudge NOI题库 1.4 编程基础之逻辑表达式与条件分支
OpenJudge NOI题库 1.4 编程基础之逻辑表达式与条件分支 OpenJudge - OpenJudge - 题目 啊哈C语言 第11讲 4.1.4_01判断数正负 啊哈C语言 第11讲 4 ...
- OpenJudge NOI题库 1.5编程基础之循环控制
OpenJudge NOI题库 1.5编程基础之循环控制 OpenJudge - OpenJudge - 题目 1.5_01求平均年龄 1.5_01求平均年龄_哔哩哔哩_bilibili 1.5_02 ...
- noi题库1010. 邮寄包裹
noi题库1010. 邮寄包裹 题目描述 某邮局对邮寄包裹有如下规定:若包裹的重量超过30千克,不予邮寄,对可以邮寄的包裹每件收手续费0.2元,再加上根据下表按重量wei计算的结果: 重量(千克) 收 ...
- noi题库1005. 存款收益
noi题库1005. 存款收益 题目描述 按年利率R%存入本钱X,存入P年后的本利合计为Y=X*((100+R)/100)^P,求Y的值. 输入 输入一行三个空格隔开的实数R,X,P 输出 输出收益Y ...
- NOI题库 python题解-2022.01.07整理(1.1-1.3)
python && C++ NOI编程题解1.1 https://blog.csdn.net/yigezzchengxuyuan/article/details/86582640 ht ...
- NOI题库 7654 等差数列末项计算
http://noi.openjudge.cn/math/7654/ /* NOI题库 7654 等差数列末项计算 http://noi.openjudge.cn/math/7654/ */ #inc ...
最新文章
- 图像分割2020总结:结构,损失函数,数据集和框架
- 来自褪墨:个人回顾与展望/2011年的回顾和对2012年的计划
- 好玩的WPF第四弹:用Viewport2DVisual3D实现3D旋转效果
- ES6的Set和Map你都知道吗?一文了解集合和字典在前端中的应用
- Cookie 详解
- JQuery中常用方法备忘
- Vue2.5.1+Spring支持分销、团购、秒杀、优惠券、微信商城项目,源码免费分享
- 单片机课设中期报告_本科毕业设计中期检查报告.doc
- Latex排版技巧:输入罗马数字
- PageAdmin CMS网站建设教程:自定义字段如何关联栏目表
- 硬科技驱动西咸新区发展新引擎
- 7.ratings评价列表页的实现
- Android之按钮点击事件——显示图片隐藏图片
- 一日一命令:find 命令详解
- Silverlight Tools 3 安装时发生严重错误
- 添加了validaterequest=false 为什么还是报错
- MySql项目查询优化经验总结
- OSPF虚链接的基本配置
- 2018 世界杯:科技辅助裁判是否靠谱?
- 云来创始人谌鹏飞受邀中国连锁业O2O大会演讲《极速·连接》