fuz 2159 WuYou
Accept: 16 Submit: 64
Time Limit: 1000 mSec Memory Limit : 32768
KB
Problem Description
有两个正整数A和B,这两个数的位数相同且不含前缀0。A的一些位不能够确定,用‘?’代替。已知A是满足 A < B 的最大的A。求A 。
Input
第一行一个整数T(T<=1000),表示有T组数据。
每组数据两行,第一行为A,第二行为B(0 < A,B <= 10^10000)。
Output
对于每组数据,输出满足A<B的最大的A。如果不存在,输出-1。
Sample Input
Sample Output
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
using namespace std; char a[];
char b[];
int alen,blen;
struct node
{
bool front_min;
}f[]; void Init(int n)
{
int i;
for(i=;i<=n;i++)
{
f[i].front_min=false;
}
}
void solve()
{
int i;
bool end_min=false;
for(i=alen-;i>=;i--)
{
if(a[i]!='?')
{
if(a[i]<b[i]) end_min=true;
else if(a[i]>b[i]) end_min=false;
}
else if(a[i]=='?')
{
if(f[i].front_min==true)
{
a[i]='';
}
else if(f[i].front_min==false && end_min==true)
{
a[i]=b[i];
}
else if(f[i].front_min==false && end_min==false)
{
if(b[i]=='')
{
a[i]='';
end_min=false;
}
else
{
a[i]=b[i]-;
end_min=true;
}
}
}
}
if(a[]!='' && strcmp(a,b)<)
{
for(i=;i<alen;i++) printf("%c",a[i]);
printf("\n");
}
else printf("-1\n");
}
int main()
{
int i,T;
bool front_min;
scanf("%d",&T);
getchar();
while(T--)
{
scanf("%s%s",a,b);
alen=strlen(a);
blen=strlen(b);
if(alen<blen){printf("-1\n");continue;}
Init(alen);
front_min=false;
for(i=;i<alen;i++)
{
if(a[i]!='?' && a[i]!=b[i])
{
front_min=true;
}
if(front_min==true)
f[i].front_min=true;
}
solve();
}
return ;
}
搜索
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
using namespace std; char a[];
char b[];
int alen,blen;
bool end_min; void dfs(bool front_min,int i)
{
if(a[i]=='\0') return;
if(a[i]!='?')
{
if(a[i]!=b[i])
front_min=true;
}
dfs(front_min,i+);
if(a[i]=='?')
{
if(front_min==true)
{
a[i]='';
}
else if(front_min==false && end_min==true)
{
a[i]=b[i];
}
else if(front_min==false && end_min==false)
{
if(b[i]=='')
{
a[i]='';
end_min=false;
}
else
{
a[i]=b[i]-;
end_min=true;
}
}
}
else if(a[i]!='?')
{
if(a[i]<b[i])
end_min=true;
else if(a[i]>b[i])
end_min=false;
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%s%s",a,b);
alen=strlen(a);
blen=strlen(b);
if(alen<blen){printf("-1\n");continue;} end_min=false;
dfs(false,);
if(a[]!='' && strcmp(a,b)<)
{
printf("%s\n",a);
}
else printf("-1\n");
}
return ;
}
fuz 2159 WuYou的更多相关文章
- HITtrainning20140417题解
题目列表: ID Origin Title 10 / 15 Problem A FZU 2152 文件系统 0 / 16 Problem B FZU 2153 A simple geome ...
- hdu 2159 FATE
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 思路:二维完全背包,状态转移方程为: f[j][l]=max(f[j][l],f[j-b[i]] ...
- HDU 2159 FATE(二维费用背包)
FATE Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- POJ 2159 Ancient Cipher 难度:0
题目链接:http://poj.org/problem?id=2159 #include <cstring> #include <cstdio> #include <cc ...
- HDU 2159 FATE (二维完全背包
FATE http://acm.hdu.edu.cn/showproblem.php?pid=2159 Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备 ...
- Poj 2159 / OpenJudge 2159 Ancient Cipher
1.链接地址: http://poj.org/problem?id=2159 http://bailian.openjudge.cn/practice/2159 2.题目: Ancient Ciphe ...
- HDU 2159 二维费用背包问题
一个关于打怪升级的算法问题.. 题意:一个人在玩游戏老是要打怪升级,他愤怒了,现在,还差n经验升级,还有m的耐心度(为零就删游戏不玩了..),有m种怪,有一个最大的杀怪数s(杀超过m只也会删游戏的.. ...
- hdu 2159
二维背包,dp[i][j]表示忍耐度为i,且还可以杀j个怪时能获得的最大经验值 dp[i][j]=max(dp[i][j],dp[i-r[k]][j-1]+e[k]),r[k]为杀死第k种怪掉的忍耐度 ...
- hdu 2159 FATE (二维完全背包)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 思路: dp[j][k] 代表消耗耐久度j,干掉k个敌人获得的经验值. 状态转移方程为: dp[j] ...
随机推荐
- Mysql数据库二:表的增删改查
----建表CREATE TABLE emp( id int PRIMARY key auto_increment, name char(10) , birthday DATE , salary FL ...
- *p++与(*p)++与*(p++)------自增运算符常见误区
自增运算符(++) 自增\自减运算符分为前缀形(++a)和后缀形(a++),这里重点分析自增 大部分人对前缀和后缀的理解一般是,前缀形式是先++再使用(先变后用),后缀形式是先使用再++(先用后变) ...
- PyMysql复习
参考:http://www.cnblogs.com/liwenzhou/p/8032238.html 使用pycharm操作数据库. 填一个数据库名,User:填root 填写要连接的数据库. 建表. ...
- JavaScript定时器作业
JavaScript定时器作业 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta char ...
- Zookeeper原理分析之存储结构TxnLog
Zookeeper事物日志文件用于记录事物操作,如添加,删除节点等等,都会在事务日志中记录一条记录.下面我们就详细分析一下txnLog事务日志文件. txnLog事务日志文件文件由三部分组成: 日志文 ...
- Python小白学习之路(八)—【变量】【基本数据类型分类】【集合】【集合的功能】
一.变量 变量的作用:记录状态的变化变量的值:描述不同的状态 二.五大基本数据类型的分类 五大基本数据类型(数字 字符串 列表 元祖 字典) 按照可变不可变来进行分类 可变:列表.字典 不可变:字符串 ...
- 语义分割Semantic Segmentation研究综述
语义分割和实例分割概念 语义分割:对图像中的每个像素都划分出对应的类别,实现像素级别的分类. 实例分割:目标是进行像素级别的分类,而且在具体类别的基础上区别不同的实例. 语义分割(Semantic S ...
- 【xsy1378】 水题7号 贪心
题目大意:有$m$组约束关系$(x_i,y_i)$,你要构造一个排列,满足数$x_i$出现在数$y_i$前面,请使得这个排列字典序最小,请输出这个排列.无解请输出-1. 数据范围:$n,m≤10^5$ ...
- eclip 重写从父类继承的方法的快捷操作
转载自http://blog.sina.com.cn/s/blog_53d599430101phlo.html 一.在代码中单击鼠标右键,在弹出的快捷菜单中选择“源代码(Source)”-&g ...
- Xpath string()提取多个子节点中的文本
<div> <ul class="show"> <li>275万购昌平邻铁三居 总价20万买一居</li> <li>00 ...