Problem 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

3
1
9
?
8
?1
11

Sample Output

1
7
-1
 
 一开始做,思路都是错的。
思路:对于?而言,假如前面已经有数字不同了,那我不管就取9.
         假如前面是相同的,那么我要看后面的满足是否有满足小于的,有则去于另一个数字对应位置相同;否则,取另一个数字对应位-1 。
两种方式写。
 #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的更多相关文章

  1. HITtrainning20140417题解

    题目列表:     ID Origin Title 10 / 15 Problem A FZU 2152 文件系统   0 / 16 Problem B FZU 2153 A simple geome ...

  2. hdu 2159 FATE

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 思路:二维完全背包,状态转移方程为: f[j][l]=max(f[j][l],f[j-b[i]] ...

  3. HDU 2159 FATE(二维费用背包)

    FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  4. POJ 2159 Ancient Cipher 难度:0

    题目链接:http://poj.org/problem?id=2159 #include <cstring> #include <cstdio> #include <cc ...

  5. HDU 2159 FATE (二维完全背包

    FATE http://acm.hdu.edu.cn/showproblem.php?pid=2159 Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备 ...

  6. Poj 2159 / OpenJudge 2159 Ancient Cipher

    1.链接地址: http://poj.org/problem?id=2159 http://bailian.openjudge.cn/practice/2159 2.题目: Ancient Ciphe ...

  7. HDU 2159 二维费用背包问题

    一个关于打怪升级的算法问题.. 题意:一个人在玩游戏老是要打怪升级,他愤怒了,现在,还差n经验升级,还有m的耐心度(为零就删游戏不玩了..),有m种怪,有一个最大的杀怪数s(杀超过m只也会删游戏的.. ...

  8. 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种怪掉的忍耐度 ...

  9. hdu 2159 FATE (二维完全背包)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2159 思路: dp[j][k] 代表消耗耐久度j,干掉k个敌人获得的经验值. 状态转移方程为: dp[j] ...

随机推荐

  1. day 94 RestFramework序列化组件与视图view

    一 .复习 1. CBV流程 class BookView(View): def get(): pass def post(): pass #url(r'^books/', views.BookVie ...

  2. Hash Table-720. Longest Word in Dictionary

    Given a list of strings words representing an English Dictionary, find the longest word in words tha ...

  3. 《Vue 编程房内考》

    古人有云:码农爱coding,则为之计深远. 众人问:何为之? 古人曰:底层.算法和架构. 众木然. 古人又曰:多看源码. 以下内容是我在学习 Vue-2.5.2 源码时的一个总结. 第一章 活捉Vu ...

  4. SQL 必知必会 总结(一)

    SQL必知必会 总结(一) 第 1 课 了解SQL 1.数据库(database): 保存有组织的数据容器(通常是一个文件或一组文件). 2.数据库管理系统(DBMS): 数据库软件,数据库是通过 D ...

  5. 如何查看linux服务器的版本和配置信息

    linux下看配置,可没有windows那么直观.你只能一个一个查看. 一:cpu[root@srv /]# more /proc/cpuinfo | grep "modelname&quo ...

  6. Swift 中@available 和 #available

    Swift 2.0 中,引入了可用性的概念.对于函数,类,协议等,可以使用@available声明这些类型的生命周期依赖于特定的平台和操作系统版本.而#available用在判断语句中(if, gua ...

  7. AngularJS学习之旅

    开篇 最近由于项目上可能需要用到AngularJS,公司将技术学习.调研的任务安排了下来,因此开始了我的AngularJS学习之路. 在这之前没写过技术博客,主要是由于太懒,另外自愧文笔不好,因此一直 ...

  8. h5博彩webapp项目实例|h5棋牌游戏|h5博彩app案例

    html5实现的博彩webapp.h5棋牌app实例,运用h5+css3+zepto+jQ+swiper+layer等技术进行布控开发,750px最大宽度适配手机端设备,采用flex+rem布局样式. ...

  9. (转)ldd 查看程序依赖库

    原文:https://blog.csdn.net/u010977122/article/details/52993560?spm=a2c4e.11153940.blogcont551034.8.4f7 ...

  10. ubuntu 安装JDK8

    1.下载JDK选择下载Linux版本-64位:jdk-8u65-linux-x64.tar.gz下载链接:http://www.oracle.com/technetwork/java/javase/d ...