Codeforces 670F - Restore a Number - [字符串]
题目链接:https://codeforces.com/contest/670/problem/F
题意:
有一个非负整数 $n$,在它的右侧添上它的位数后,被发送出去;例如 $6510$,加上位数 $4$,变成 $65104$,发送出去。
但是,接受者接收到的数字则是被打乱了的,例如接收到了 $01465$,发送者只知道其中一段数字是什么,例如知道原数字中有一段是 $51$。
要你根据已知的信息推测出可能的 $n$ 中最小的那个。
题解:
首先在大约 $O(n)$ 的时间复杂度下可以知道这个数字是 $k$ 位。
然后,我们可以知道这个数字是由 $c_0$ 个 $0$、$c_1$ 个 $1$、……、$c_9$ 个 $9$,以及一段给定的一段数字 $t$ 组成的。
我们要考虑如何找出最小的那个,不妨考虑如下可能的情况:
1、$t$ + $c_0$ 个 $0$ + …… + $c_9$ 个 $9$。
2、在 $1 \sim 9$ 找一个最小的打头,剩下的依旧按照若干个 $0$ + …… + 若干个 $9$ 排列,其中 $t$ 按照 $t[0]$ 是什么,插在那个数的左侧或者右侧;例如 $10022599$,而 $t = [223]$,则有可能是答案的是 $100[223]22599$ 或者 $10022[223]599$;另一种例子是 $1089$,$t = [63]$,则可能是答案的是 $10[63]89$。
答案只可能是以上这些情况中的一种。
AC代码:
#include<bits/stdc++.h>
using namespace std;
const int SIZE=1e6+;
char s[SIZE],t[SIZE];
int slen,tlen;
int cnt_s[],cnt_t[];
int digit()
{
int dgt;
vector<int> v;
for(dgt=tlen;dgt<=slen;dgt++)
{
int tp[]={}, k=dgt;
while(k) ++tp[k%], k/=; bool ok=; for(int i=;i<;i++) if(cnt_t[i]+tp[i]>cnt_s[i]) ok=; int sum=;
for(int i=;i<;i++) sum+=cnt_s[i]-tp[i];
if(sum!=dgt) ok=; if(ok)
{
for(int i=;i<;i++) cnt_s[i]-=cnt_t[i]+tp[i];
return dgt;
}
}
}
bool check(const string& s) //检查前导零
{
if(s.size()> && s[]=='') return ;
else return ;
}
int main()
{
ios::sync_with_stdio();
cin.tie(), cout.tie(); cin>>s>>t;
slen=strlen(s), tlen=strlen(t); for(int i=;i<slen;i++) cnt_s[s[i]-'']++;
for(int i=;i<tlen;i++) cnt_t[t[i]-'']++;
int dgt=digit(); string res1,res2,res3; res1=t;
for(int i=;i<;i++)
{
for(int j=;j<=cnt_s[i];j++)
{
res1+=(char)(''+i);
}
} for(int i=;i<;i++)
{
if(cnt_s[i]>)
{
res2+=(char)(''+i);
res3+=(char)(''+i);
cnt_s[i]--;
break;
}
}
for(int i=;i<;i++)
{
if(t[]-''==i) res2+=(string)t; while(cnt_s[i]>)
{
res2+=(char)(''+i);
res3+=(char)(''+i);
cnt_s[i]--;
} if(t[]-''==i) res3+=(string)t;
} string ans;
if(!check(res1)) ans=(ans.size()?min(ans,res1):res1);
if(!check(res2)) ans=(ans.size()?min(ans,res2):res2);
if(!check(res3)) ans=(ans.size()?min(ans,res3):res3);
cout<<ans<<'\n';
}
Codeforces 670F - Restore a Number - [字符串]的更多相关文章
- CodeForces 670F Restore a Number
模拟. 首先暴力找到答案的位数,然后就是分类讨论输出答案. #pragma comment(linker, "/STACK:1024000000,1024000000") #inc ...
- 【11.61%】【codeforces 670F】Restore a Number
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- Codeforces Round #350 (Div. 2) F. Restore a Number 模拟构造题
F. Restore a Number Vasya decided to pass a very large integer n to Kate. First, he wrote that num ...
- Codeforces C. Split a Number(贪心大数运算)
题目描述: time limit per test 2 seconds memory limit per test 512 megabytes input standard input output ...
- [Codeforces 1208D]Restore Permutation (树状数组)
[Codeforces 1208D]Restore Permutation (树状数组) 题面 有一个长度为n的排列a.对于每个元素i,\(s_i\)表示\(\sum_{j=1,a_j<a_i} ...
- Codeforces Round #567 (Div. 2)B. Split a Number (字符串,贪心)
B. Split a Number time limit per test2 seconds memory limit per test512 megabytes inputstandard inpu ...
- Codeforces Round #300(A.【字符串,多方法】,B.【思维题】,C.【贪心,数学】)
A. Cutting Banner time limit per test:2 seconds memory limit per test:256 megabytes input:standard i ...
- dp --- Codeforces 245H :Queries for Number of Palindromes
Queries for Number of Palindromes Problem's Link: http://codeforces.com/problemset/problem/245/H M ...
- 【codeforces 805D】Minimum number of steps
[题目链接]:http://codeforces.com/contest/805/problem/D [题意] 给你一个字符串; 里面只包括a和b; 让你把里面的"ab"子串全都去 ...
随机推荐
- GitHub下载安装以及开源项目
Git for Windows安装与使用 http://cioworld.org/freedom/content/git-windows 下载Git-1.8.3-preview20130601.exe ...
- Charles for Mac(HTTP 监视器和网络抓包工具)破解版安装
1.软件简介 Charles 是在 Mac.Linux 或 Windows 下常用的 http 协议网络包截取工具,在平常的测试与调式过程中,掌握此工具就基本可以不用其他抓包工具了.Charle ...
- Nginx 访问日志配置
一.Nginx 访问日志介绍 Nginx 软件会把每个用户访问网站的日志信息记录到指定的日志文件里,供网站提供者分析用户的浏览行为等,此功能由 ngx_http_log_module 模块负责. 二. ...
- 揭开Docker的神秘面纱
Docker 相信在飞速发展的今天已经越来越火,它已成为如今各大企业都争相使用的技术.那么Docker 是什么呢?为什么这么多人开始使用Docker? 本节课我们将一起解开Docker的神秘面纱. 本 ...
- 物联网架构成长之路(15)-Jenkins部署SpringBoot
1.前言 现在慢慢也在负责一些工作了.这段时间有空,就多了解了解软件多人开发的一些知识.以前项目都是我一个人做的,从数据库设计到后端再到前端,全部放在一个war包丢到tomcat里面然后运行,利用to ...
- idea svn 不见的问题
问题一: IntelliJ IDEA打开带SVN信息的项目不显示SVN信息,项目右键SVN以及图标还有Changes都不显示解决方法 在VCS菜单中有个开关,叫Enabled Version Cont ...
- Java编程的逻辑 (84) - 反射
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- Java编程的逻辑 (81) - 并发同步协作工具
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- Pwnium CTF2014 – MatterOfCombination writeup
这道题是虽然只有75分,但是做出来的队伍却很少,我们队伍也没有做出来,这次是看到了0xAWES0ME 的解题思路后才有了这篇文章.原文地址可以点击看这里,英文的. 题目就是一张图片: 在网上可以找到这 ...
- Java知多少(88)列表和组合框
列表和组合框是又一类供用户选择的界面组件,用于在一组选择项目选择,组合框还可以输入新的选择. 列表 列表(JList)在界面中表现为列表框,是JList类或它的子类的对象.程序可以在列表框中加入多个文 ...