CFgym:Good morning!(dfs)
来源:互联网 发布:linux怎么建站 编辑:程序博客网 时间:2024/05/22 09:26
For an example input:
3
180
83
132
a possible correct answer is:
180
80
133
题意:如图键盘,只能向下或向右或原地按,T组数据,给出N,1<=N<=200,输出能按出来的离N最近的数字。
思路:dfs构造所有数字存下,二分搜索即可。
# include <bits/stdc++.h>using namespace std;int m[6][6]={{-1,-1,-1,-1},{-1,1,2,3},{-1,4,5,6},{-1,7,8,9},{-1,-1,0,-1}};int dx[2]={0,1}, dy[2]={1,0};set<int>s;void dfs(int px, int py, int x, int y, int num){ if(num>=300 || x>4||y>3||m[x][y]==-1) { if(px==4&&py==2 || px==3&&py==3) s.insert(num); return; } for(int i=0; i<2; ++i) { int mx = x+dx[i], my = y+dy[i]; dfs(x, y, mx, my, num); if(num < 100) { dfs(x, y, mx, my, num*10+m[x][y]); if(num < 10) { dfs(x, y, mx, my, (num*10+m[x][y])*10+m[x][y]); if(num == 0) dfs(x, y, mx, my, ((num*10+m[x][y])*10+m[x][y])*10+m[x][y]); } } }}int main(){ dfs(0, 0, 1, 1, 0); int t, n; scanf("%d",&t); while(t--) { scanf("%d",&n); auto it = s.upper_bound(n); int ans = *it; if(it != s.begin()) { int tmp = abs(*(--it)-n); if(tmp < abs(ans-n)) ans = *it; } printf("%d\n",ans); } return 0;}
阅读全文
0 0
- CFgym:Good morning!(dfs)
- CFgym:Digits Permutation(DFS)
- Good Morning!
- Good morning
- Good Morning
- CFgym:Sky Tax(DFS序 & 树)
- CFgym:Old Chess Sets(dfs 循环)
- Good morning [字符串]
- 1279: Good morning
- Good morning [字符串]
- 1279: Good morning
- 【冀宝要逆袭】UESTC-486-Good Morning
- Good Morning Beijing,Good Night Shanghai
- UVA - 10596 Morning Walk (欧拉回路+dfs)
- CFgym:Castle(KMP)
- CFGym
- CFGym
- CFGym
- MyBatis和Spring进行整合
- 创建一个不能被继承的类和只能在堆上(或栈上)创建对象
- 一张图看懂微信小程序发展
- Android studio加快编译速度
- WebService的两种方式SOAP和REST比较
- CFgym:Good morning!(dfs)
- python调用chrome ie等浏览器
- 云服务器中安装wordpress,却不能使用公网IP进行访问
- 手机拍摄实时互联网直播解决方案
- vue中this.$el 和 this.$ref
- react router4.0的一些变化
- opencv减色算法
- ESXi 6.x 强制识别 ssd 硬盘
- Spring4实战记录