FZU--2159 WuYou
来源:互联网 发布:快乐家族关系知乎 编辑:程序博客网 时间:2024/05/17 22:25
有两个数,数B是确定的,数A的一些位是不确定的,用“?”表示,求满足A < B的最大整数A。A、B位数相同且不含前导零。
http://acm.fzu.edu.cn/problem.php?pid=2159
从前到后遍历A,如果A[i] = '?', A[i] = B[i].如果A[i] < B[i],就把i之后的问号位置变成‘9’(保证A最大),然后输出。如果A[i]>B[i],从后向前找原字符串中A[j] = '?'的位置,要保证B[j] != '0'并且不会产生前导零,将A[j]--,再将j之后原串(注意是原串!!QAQ)是‘?’的位置变成‘9’,输出。否则输出-1.
如果遍历结束后A=B,就像A[i] > B[j]的情况一样操作就可以了。
#include <stack>#include <cstdio>#include <vector>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;#define pb push_backconst int inf = 0x3f3f3f3f;const int mod = 1000000007;const int maxn = 100000 + 10;char a[maxn], b[maxn], c[maxn];int t;void solve(char * A){ stack<int> sta; while(!sta.empty()) sta.pop(); for(int i=0; A[i]; i++){ if(A[i] == '?'){ sta.push(i); A[i] = b[i]; } else if(A[i] > b[i]){ while(!sta.empty()){ int k = sta.top(); sta.pop(); if(k == 0 && A[k] == '1') break; if(A[k] != '0'){ A[k]--; for(int j=k+1; A[j]; j++) if(a[j] == '?')A[j] = '9'; printf("%s\n", A); return; } } puts("-1"); return; } else if(A[i] < b[i]){ for(int j=i+1; A[j]; j++) if(a[j] == '?')A[j] = '9'; printf("%s\n", A); return; } } while(!sta.empty()){ int k = sta.top(); sta.pop(); if(k == 0 && A[k] == '1') break; if(A[k] != '0'){ A[k]--; for(int i=k+1; A[i]; i++) if(a[i] == '?') A[i] = '9'; printf("%s\n", A); return; } } puts("-1");}int main(){ scanf("%d", &t); while(t--){ scanf("%s%s", a, b); strcpy(c, a); solve(c); } return 0;}
0 0
- FZU--2159 WuYou
- FZU 2159 WuYou(贪心)
- FZU - 2159 - WuYou (模拟= =!)
- fzu 2159 WuYou (中等难度)终于是AC了,太激动了。。。
- Problem 2159 WuYou
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- FZU
- MBA中国网关注:父母该不该插手子女的MBA申请?
- oel6.3上 oracle RAC 上节点驱逐检查过程。
- 蓝桥杯练习(vip) 时间转换
- mysql数据库的左连接,右连接,内链接。有何区别
- Quartz-Java Job Scheduler, Java定时框架
- FZU--2159 WuYou
- 解决Zend Studio和Eclipse 左边不显示SVN信息问题
- EHCache分布式缓存集群环境配置
- Nyoj 47 过河问题
- int number
- 开发一款手机格斗网游需要注意些什么
- 通过对象容器来传引用
- 差分约束系统(持续更新中)
- ZOJ 3753 Simple Equation