COWRUN
USACO COWRUN 随机化搜索+双重递归调用
题面描述:给出8*N(<=14)组牌,每次按顺序选择8张,FJ可以选择前4张或者后4张,COW从FJ选出的牌中选择前两张或者后两张,然后COW会在环上走\(R \times A+B\),R为已经走的距离,A,B分别为选出的第一张和第二张牌,COW会在长度为M的换上走,要求最终cow,离起点的距离小于等于K,题目给出COW的决策,你要确定FJ的决策,注意由于FJ在COW 之前决策,也就说FJ所选出的决策一定要满足,无论之后COW如何选择,COW都能满足条件,求字典序最小
题目非常巧妙:N很小我们 可以搜索,如何去判断FJ的决策合法:枚举到下一层奶牛选择的两种可能,他们必须都合法,如何验证他们的合法性,分别进入下一层搜索树,只要有一个FJ的决策合法即可
这样做只有80分:数据可能会K你的决策 比如有很多的T
code
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n;
long long m,k;
int aa[20][10];
char s[20];
inline int cal(int pos,long long now,int a,int b){
int temp=4*a+2*b+1;
return (now*(aa[pos][temp]+1)%m+aa[pos][temp+1])%m;
}
inline bool dfs(int pos,long long now,int a);
inline bool efs(int pos,long long now){
if(pos>n)return now<=k || now>=m-k;
return dfs(pos,now,1)||dfs(pos,now,0);
}
inline bool dfs(int pos,long long now,int a){
return efs(pos+1,cal(pos,now,a,1))&&efs(pos+1,cal(pos,now,a,0));
}
int main(){
cin>>n>>m>>k;
scanf("%s",s+1);
for(int i=1;i<=n;++i)
for(int j=1;j<=8;++j)cin>>aa[i][j];
long long now=0;
for(int i=1;i<=n;++i){
if(dfs(i,now,1)){
cout<<"B";
now=cal(i,now,1,s[i]=='B');
}
else {
cout<<"T";
now=cal(i,now,0,s[i]=='B');
}
}
return 0;
}
/*
2 2 0
TT
1 0 0 0 0 0 0 1
0 1 1 1 0 0 1 0
*/
类似TREAP的思想:随机化COW的选择判断答案的合法性不会被数据HACK
code:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cstdlib>
using namespace std;
int n;
long long m,k;
int aa[20][10];
char s[20];
inline int cal(int pos,long long now,int a,int b){
int temp=4*a+2*b+1;
return (now*(aa[pos][temp]+1)%m+aa[pos][temp+1])%m;
}//第pos次拿牌,当前位置在now,fj选了a,cow选了b后的位置
inline bool dfs(int pos,long long now,int a);
inline bool efs(int pos,long long now){
if(pos>n)return now<=k || now>=m-k;
int x=rand()&1;
return dfs(pos,now,x)||dfs(pos,now,!x);//个
}//第pos次拿牌,当前位置在now,是否可行,验证就是FJ强制选或强制不选
inline bool dfs(int pos,long long now,int a){
int x=rand()&1;
return efs(pos+1,cal(pos,now,a,x))&&efs(pos+1,cal(pos,now,a,!x));
}//第pos次拿牌,当前位置在now,fj选择a是否可行,验证只需后一个奶牛是否可以随便选
int main(){
cin>>n>>m>>k;
scanf("%s",s+1);
for(int i=1;i<=n;++i)
for(int j=1;j<=8;++j)cin>>aa[i][j];
long long now=0;
for(int i=1;i<=n;++i){
if(dfs(i,now,1)){
cout<<"B";
now=cal(i,now,1,s[i]=='B');
}
else {
cout<<"T";
now=cal(i,now,0,s[i]=='B');
}
}
return 0;
}
/*
2 2 0
TT
1 0 0 0 0 0 0 1
0 1 1 1 0 0 1 0
*/
COWRUN的更多相关文章
- USACO翻译:USACO 2012 JAN三题(2)
USACO 2012 JAN(题目二) 一.题目概览 中文题目名称 叠干草 分干草 奶牛联盟 英文题目名称 stacking baleshare cowrun 可执行文件名 stacking bale ...
- COGS 146. [USACO Jan08] 贝茜的晨练计划
★☆ 输入文件:cowrun.in 输出文件:cowrun.out 简单对比时间限制:1 s 内存限制:32 MB 奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运 ...
- noip2018 pre——Dp
Dp专题 1011: KC的瓷器 (porcelain) 题目描述 KC来到了一个盛产瓷器的国度.他来到了一位商人的店铺.在这个店铺中,KC看到了一个有n(1<=n<=100)排的柜子,每 ...
- bzoj2581 [USACO 2012 Jan Gold] Cow Run【And-Or Tree】
传送门1:http://www.usaco.org/index.php?page=viewproblem2&cpid=110 传送门2:http://www.lydsy.com/JudgeOn ...
- 2016.8.15上午纪中初中部NOIP普及组比赛
2016.8.15上午纪中初中部NOIP普及组比赛 链接:https://jzoj.net/junior/#contest/home/1333 这次比赛不怎么好,因为这套题目我并不是很擅长. 可同学们 ...
随机推荐
- Linux 设备驱动之 UIO 机制(基本概念)
一个设备驱动的主要任务有两个: 1. 存取设备的内存 2. 处理设备产生的中断 对于第一个任务.UIO 核心实现了mmap()能够处理物理内存(physical memory),逻辑内存(logica ...
- netty学习(二)--传统的bio编程
网络编程的基本模型是Client/Server模型.也就是两个进程之间进行相互通信,当中服务端提供位置信息( 绑定ip地址和监听port),client通过连接操作向服务端监听的地址发送连接请求,通过 ...
- 10.29 工作笔记 ndk编译C++,提示找不到头文件(ndk-build error: string: No such file or directory)
ndk编译C++.提示找不到头文件(ndk-build error: string: No such file or directory) 被这个问题弄得愁眉苦脸啊.心想为啥一个string都找不到呢 ...
- Android 经常使用工作命令mmm,mm,m,croot,cgrep,jgrep,resgrep,godir
官方定义: Invoke ". build/envsetup.sh" from your shell to add the following functions to your ...
- 转发真阿当老师的一片文章 受益匪浅 (出处:http://cly84920.blog.163.com/blog/static/24750013320158203575958/)
忽悠程序员做一辈子程序员,以白胡子白头发hacker为目标的人有两种: 1,自己不写程序,但需要有将才为自己打下手的人,这种人往往看他资质和勤奋均平平,却成了你领导.别不服,这种人虽不见得有帅才的能力 ...
- CSRF的原理
CSRF是什么? (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一,也被称为“One Click ...
- spring boot actuator工作原理之http服务暴露源码分析
spring boot actuator的官方文档地址:https://docs.spring.io/spring-boot/docs/current/reference/html/productio ...
- SQL 循环30日
循环30日的统计 大概格式是 with Date as ( select cast(DATEADD(mm, DATEDIFF(mm,,getdate()), ) as datetime) Date u ...
- 日志文件支持unicode字符的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 开发的程序兼容多字节字符集和unicode字符集,最近发现一个问题,在unicode字符集下输出的日志文件是乱码的.显 ...
- SSM中使用POI实现excel的导入导出
环境:导入POI对应的包 环境: Spring+SpringMVC+Mybatis POI对应的包 <dependency> <groupId>org.apache.poi&l ...