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] ...
随机推荐
- 在kolla中配置cinder ceph多后端
原文链接:在kolla中配置cinder ceph多后端
- python 简单搭建阻塞式单进程,多进程,多线程服务
由于经常被抓取文章内容,在此附上博客文章网址:,偶尔会更新某些出错的数据或文字,建议到我博客地址 : --> 点击这里 我们可以通过这样子的方式去理解apache的工作原理 1 单进程TCP服 ...
- 638. Shopping Offers
In LeetCode Store, there are some kinds of items to sell. Each item has a price. However, there are ...
- 奇异值分解(SVD)详解及其应用
参考:https://blog.csdn.net/shenziheng1/article/details/52916278 论文:http://www-users.math.umn.edu/~lerm ...
- Codeforces Round #427 (Div. 2) B. The number on the board
引子: A题过于简单导致不敢提交,拖拖拉拉10多分钟还是决定交,太冲动交错了CE一发,我就知道又要错过一次涨分的机会.... B题还是过了,根据题意目测数组大小开1e5,居然蒙对,感觉用vector更 ...
- 查看SMB服务器用户
查看SMB服务器用户:pdbedit -L 查看SMB服务器运行状态:service smb status
- Flask从入门到精通之链接的使用
在Web开发中,任何具有多个路由的程序都需要可以连接不同页面的链接,例如导航条. 在模板中直接编写简单路由的URL 链接不难,但对于包含可变部分的动态路由,在模板中构建正确的URL 就很困难.而且,直 ...
- centos7硬盘分区
首先在虚拟机的设置中为系统添加硬盘 使用fdisk -l /dev/sdb 查看未分区的硬盘 fdisk -l /dev/sda 这是已经分区好得 接下来我们就要对sdb进行分区: 首先使用fd ...
- javascript数据结构与算法--二叉树遍历(先序)
javascript数据结构与算法--二叉树遍历(先序) 先序遍历先访问根节点, 然后以同样方式访问左子树和右子树 代码如下: /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * ...
- Java之集合(二十二)PriorityBlockingQueue
转载请注明源出处:http://www.cnblogs.com/lighten/p/7510799.html 1.前言 本章介绍阻塞队列PriorityBlockingQueue.这是一个无界有序的阻 ...