OI生涯 - 悄无声息

题目描述


「李」走路是没有动静的,如果你在干「李」不让你干的事情,他会神不知鬼不觉的走到你的身后,然后把你奶一顿!

因为你知道「李」走路没有动静,所以为了提防,可以认为「李」有多个分身

「李」的移动路径是非常奇怪的,他拥有一个网格图,一开始每个格子都有一个向右的箭头,他每次移动会按照当前所在格子的箭头指示移动,并将该格子的箭头方向改变,每个格子的箭头方向仅存在向右和向下两种

如果同时存在多个「李」的分身走到了同一个格子,他们会变成一个分身

每个时刻所有「李」的分身会移动一次并在 (0,0)生成一个分身

现在你想知道在 t秒后,(x,y) 这个格子上是否存在「李」的分身


输入


第一行一个整数 T,表示输入数据的组数

接下来每组数据中均只有一行数据,每行三个整数 t,x,y,含义如题所述


输出


共 T行,每行输出YESNO,表示 (x,y) 这个格子上是否存在「李」的分身的回答


样例输入


5
1 1 0
5 1 3
0 0 0
2 4 5
2 0 2


样例输出


NO
YES
YES
NO
YES


题目分析


该题分为两个版本,仅t的数据规模发生变化

easy version,数据保证 1≤T≤100,1≤t≤100,0≤x,y≤100

hard version,数据保证 1≤T≤100,1≤t≤1^18,0≤x,y≤100


AC代码

//easy version
//递推模拟
#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se secondint n,t,x,y;
bool vis[110][110];
int cnt[110];
pair<int,int> mp[110][110];
bool fl[110][110][110];void init() {for(int i=1; i<=100; i++) {for(int j=1; j<=i; j++) {int x=mp[i][j].fi,y=mp[i][j].se;if(!vis[x][y])mp[i+1][j]= {x,y+1},fl[i][x][y+1]=true,vis[x][y]=true;elsemp[i+1][j]= {x+1,y},fl[i][x+1][y]=true,vis[x][y]=false;}}
}
bool f(int t) {if(!(x||y))return true;return fl[t][x][y];
}
int main() {init();cin>>n;while(n--) {cin>>t>>x>>y;printf("%s\n",f(t)?"YES":"NO");}return 0;
}
//hard version
//线性DP
#include<bits/stdc++.h>
using namespace std;long long f[110][110];
long long t,x,y,n;int main() {cin>>t;while (t--) {cin>>n;int x,y;cin>>x>>y;if (n < x+y) {printf("NO\n");continue;}f[0][0]=n-x-y;for (int i=0; i<=100; i++) {for (int j=0; j<=100; j++) {if (i==0 && j==0) continue;f[i][j]=0;if(i)f[i][j]+=f[i-1][j]>>1;if(j)f[i][j]+=f[i][j-1]+1>>1;}}int to=x+y,cx=x,cy=y;x=y=0;while (x+y<to) {if (f[x][y]&1) x++;else y++;}printf(x==cx&&y==cy?"YES\n":"NO\n");}return 0;
}

OI生涯 - 德国心脏病

题目描述


els打德国心脏病没输过!甚至还创造了仅用2张牌打过所有人的神话!els已因为严重破坏游戏平衡被「李」永久封号!

该游戏规则为:每张牌上都有一个动物或者一定数量的水果,每个人依次翻开自己牌堆顶的牌,将其放到自己面前的场上,如果自己面前的场上有牌,将其覆盖。

之后所有人都可以拍铃,如果一个人拍了铃,此时,如果场上的牌满足拍铃条件时,这个人可以将场上的牌收到自己手里,反之,其他人将自己出的牌收回,该人将自己场上的牌弃掉

任意时刻,场上某种水果存在正好 55 个,或出现动物牌并满足条件时,即满足拍铃条件,其中动物牌的条件如下

猴子牌:没有柠檬的情况下满足拍铃条件

大象牌:没有草莓的情况下满足拍铃条件

猪牌:任意情况都满足拍铃条件

现在用字母M表示猴子,E表示大象,P表示猪,L表示柠檬,S表示草莓,A表示苹果,B表示香蕉,现在有 n 个人进行游戏,你已经预知了接下来 k张要翻开的牌,并且从 11 号开始翻牌,你需要求出翻开这 k 张牌期间,最早是谁可以满足拍铃条件,如果 k张牌翻完没有人满足拍铃条件,输出 −1


输入


第一行一个整数 T表示数据组数

接下来 T组数据,每组数据中:

第一行两个整数 n,k

接下来 k行每行一个字母,若该字母表示水果,后面跟着一个整数 x,表示水果的数量


输出


共 T 行,每行一个整数表示最早满足拍铃条件的人的编号


样例输入


3
3 4
A 6
A 5
P
A 5
3 4
A 6
S 5
B 4
A 4
3 1
M


样例输出


3
2
1


题目分析


重点考虑被覆盖时的状态变化,当水果牌点数为0时默认不存在


AC代码

#include<bits/stdc++.h>
using namespace std;
#define fi first
#define se secondpair<char,int> st[210];
int n,k,x,T;
int cnt[150];
int vis[150];
char s;bool judge() {if(vis['P'])return true;if(vis['E']&&cnt['S']==0)return true;if(vis['M']&&cnt['L']==0)return true;if(cnt['A']==5||cnt['B']==5||cnt['L']==5||cnt['S']==5)return true;return false;
}
int main() {cin>>T;//FILE *fp;//fp=fopen("data.dat","w");while(T--) {memset(cnt,0,sizeof cnt);memset(vis,0,sizeof vis);bool f=false;int ans;cin>>n>>k;for(int i=1; i<=min(k,n); i++) {cin>>s;x=0;if(s=='A'||s=='B'||s=='L'||s=='S')cin>>x;st[i]= {s,x};cnt[s]+=x;vis[s]++;if(judge()&&!f) {f=true;ans=i;}}for(int i=n; i<k; i++) {int e=i%n+1;cin>>s;x=0;if(s=='A'||s=='B'||s=='L'||s=='S')cin>>x;char tt=st[e].fi;int ttt=st[e].se;st[e]= {s,x};cnt[tt]-=ttt;vis[tt]--;cnt[s]+=x;vis[s]++;if(judge()&&!f) {f=true;ans=e;}}if(!f)ans=-1;//   fwrite(&ans,sizeof(int),1,fp);printf("%d\n",ans);}
}

寒假算法学习 OI生涯 - 悄无声息(模拟+线性DP优化) OI生涯 - 德国心脏病 (模拟)相关推荐

  1. 2023牛客寒假算法基础集训营1_20230116「典dp」「典set」「小思维+bfs」「小思维+构造+码力」「位运算博弈(人类智慧)」

    6/13 打得不好,这两天家里也很不好,跟做梦一样,脑子好像被僵尸吃掉了,前两个小时胡乱瞎写交题只过样例,wa了再看,什么b错都能写出来. M. M-本题主要考察了找规律_2023牛客寒假算法基础集训 ...

  2. 寒假算法学习 I (9). 宇宙总统 (重载运算赋 >)

    题目描述 地球历公元 6036 年,全宇宙准备竞选一个最贤能的人当总统,共有 n 个非凡拔尖的人竞选总统,现在票数已经统计完毕,请你算出谁能够当上总统. 输入 第一行为一个整数 n,代表竞选总统的人数 ...

  3. 【算法学习笔记】67.状态压缩 DP SJTU OJ 1383 畅畅的牙签袋

    思想来自:http://blog.pureisle.net/archives/475.html 主要思想是用1和0来表示是否被填,然后根据两行之间的状态关系来构建DP方程. 1.首先初始化第一行 计算 ...

  4. 【算法学习笔记】57. 前缀树 字典序优化技巧 STL学习 SJTU OJ 1366 前缀匹配

    Description 给出一个总字符个数大小不超过1,000,000的字典(这个字典的单词顺序不为字典序)和不超过1000个长度不超过1000的前缀,输出字典中匹配该前缀,字典序为K_i的单词在字典 ...

  5. 局部线性嵌入LLE算法--学习笔记

    流形学习是一大类基于流形的框架,形象说明流形降维: ISOMAP(更多细节可参考:isomap降维算法--学习笔记_Wsyoneself的博客-CSDN博客): LLE: 和传统的PCA,LDA等关注 ...

  6. Python算法学习: 竞码编程-蓝桥杯模拟赛3题解

    文章目录 A. 试题A:生存还是毁灭,这是一个问题 7' B. 试题B:小小神枪手 开局98K 8' C. 试题C:关云长单刀会金莲,贾宝玉三打白骨精 10' D. 试题D:抽刀断水水更流,举杯销愁愁 ...

  7. 原创 | 初学者友好!最全算法学习资源汇总(附链接)

    在计算机发展飞速的今天,也许有人会问,"今天计算机这么快,算法还重要吗?"其实永远不会有太快的计算机,因为我们总会想出新的应用.虽然在摩尔定律的作用下,计算机的计算能力每年都在飞快 ...

  8. 超级干货 :最全算法学习资源汇总(附链接)

    在计算机发展飞速的今天,也许有人会问,"今天计算机这么快,算法还重要吗?"其实永远不会有太快的计算机,因为我们总会想出新的应用.虽然在摩尔定律的作用下,计算机的计算能力每年都在飞快 ...

  9. 2022牛客寒假算法基础集训营3 签到题7题(附基础集训营1-3签到题总结)

    1.A-智乃的Hello XXXX 签到 #include<bits/stdc++.h> using namespace std; int main(){cout<<" ...

最新文章

  1. [zt]如何用Javascript获得TextArea中的光标位置
  2. 前瞻:Spring Boot 2.4.0 第二个里程碑版本发布
  3. Spring - Java/J2EE Application Framework 应用框架 第 5 章 Spring AOP: Spring之面向方面编程
  4. CentOS 6安装详解及PXE 安装
  5. 流式细胞术及常见问题分析
  6. app把信息添加到mysql_如何将数据库表中的数据添加到ListView C#Xamarin Android App
  7. eviews曲线图怎么做_【干货速递】Eviews:你不可不知的经典问答!
  8. 自动Shader优化器glsl_optimizer的编译与使用
  9. ELK-filbeate收集tomcat日志
  10. GNU C 与 ANSI C(下)
  11. 企业微信机器人WorkTool使用文档
  12. Kindle 2 初探
  13. 深度长文:NLP的巨人肩膀(上)
  14. 童年计算机课企鹅游戏,这些童年游戏,你一定玩过
  15. layui使用formselect4完成的下拉框多选,拼音搜索
  16. 计算机应用基础评分标准及评分细则,《计算机应用基础》评分标准(范文).doc
  17. golang:%v,%+v,%#v的区别
  18. 服务器间通过ssh使用密钥对实现无密码登录
  19. Unity中键名称与键位对应一览
  20. 【Python爬虫系列】浅尝一下爬虫40例实战教程+源代码【基础+进阶】

热门文章

  1. 《C++面向对象程序设计》董正言、张聪版内容概括
  2. mysql 安时间查询格式_安装MySQL慢查询日志工具Anemometer
  3. centos7远程登录ssh遇到问题解决
  4. 如何用AE导出程序员可以复用的Json代码
  5. C语言阿拉伯数字转大写汉字,人民币阿拉伯数字转换为汉字大写 code
  6. Internet Download Manager2022完整版安装下载教程
  7. 安装numpy时报错
  8. excel与云mysql连接数据库_小程序读取excel表格数据,并存储到云数据库
  9. 长沙最牛逼的互联网公司都在这里了
  10. 计算机系统的图形图像编码方式,只有将数字、文字、图像、声音和视频等不同类型的信息转换成_______代码,才便于计算机加工和处理。...