2017北京国庆刷题Day1 morning T2
T2火柴棒 (stick)
Time Limit:1000ms Memory Limit:128MB
题目描述
众所周知的是,火柴棒可以拼成各种各样的数字。具体可以看下图:
通过2根火柴棒可以拼出数字“1”,通过5根火柴棒可以拼出数字“2”,以此类推。
现在LYK拥有k根火柴棒,它想将这k根火柴棒恰好用完,并且想知道能拼出的最小和最大的数分别是多少。
输入格式(stick.in)
一个数k。
输出格式(stick.out)
两个数,表示最小的数和最大的数。注意这两个数字不能有前导0。
输入样例
15
输出样例
108 7111111
数据范围
对于30%的数据k<=10。
对于60%的数据k<=20。
对于100%的数据1<k<=100。
k<=1e5可做?
知道什么叫搜索吗?就是dfs啊~
可以过k<=100000
贪心有反例 比如31 最小数是20088 不是22888
加了那么十来句剪枝就很快了~ 理论上还能更快
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> #define N 10100000 using namespace std;
int n,m,k,len1,len2,num,opt;
int ans1[N],ans2[N],pre[N],tmp[N],len;
int use[]={,,,,,,,,,}; bool cmp(int a,int b){return a>b;} inline int read()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} void update(int num)
{
if(len1<num) return;//8
if(len1==num && pre[]>ans1[] || pre[]>ans1[]) return;//9 for(int i=;i<=num;i++) tmp[i]=pre[i];
sort(pre+,pre+num+);
if(pre[]==)
for(int i=;i<=num;i++)
{
if(pre[i]!=){int j=pre[i];pre[i]=;pre[]=j;break;}
}
int flag=;if(len1>num) flag=;
else
for(int i=;i<=num;i++)
{
if(pre[i]<ans1[i])
{
flag=;break;
}
}
if(len1<num) flag=;
if(flag)
{
for(int i=;i<=num;i++) ans1[i]=pre[i];len1=num;
}
for(int i=;i<=num;i++) pre[i]=tmp[i];
} void dfs(int res)
{
if(res==)
{
update(num);
return;
}
//if(opt) return;
/*if(res%7==0)
{
for(int i=1;i<=num;i++) ans1[i]=pre[i];
for(int i=num+1;i<=num+res/7;i++) ans1[i]=8;
opt=1;
}*/
if(pre[]>ans1[] || pre[]>ans1[]) return;//1
if(len1-num> && (len1-num)*-res<) return;//2
if(num>len1/ && k-res<res) return;//3
if(num>=len1) return;//4
if(res<) return;//5 for(int i=;i<=;i++)
{ if(res== && i>) break;//6
if(res== && i>) break;//7
if(i== && num==) continue;
if(res-use[i]<) continue;
num+=; pre[num]=i;
dfs(res-use[i]);num--;
}
} int main()
{
k=read();
memset(ans1,/,sizeof ans1);
len1=k/+;
if(k%==) for(int i=;i<=k/;i++) ans2[i]=;
if(k%!=) {for(int i=;i<=k/;i++) ans2[i]=;ans2[]=;}
if(k%==) for(int i=;i<=k/;i++) ans1[i]=,len1=k/;
else dfs(k);
for(int i=;i<=len1;i++) printf("%d",ans1[i]);
printf(" ");
for(int i=;i<=k/;i++) printf("%d",ans2[i]);
return ;
}
2017北京国庆刷题Day1 morning T2的更多相关文章
- 2017北京国庆刷题Day1 afternoon
期望得分:100+100+100=300 实际得分:100+100+100=300 T1 一道图论好题(graph) Time Limit:1000ms Memory Limit:128MB 题目 ...
- 2017北京国庆刷题Day1 morning
期望得分:100+100+100=300 实际得分:100+100+70=270 T1位运算1(bit) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK ...
- 2017北京国庆刷题Day2 afternoon
期望得分:100+100+50=250 实际得分:100+70+50=220 T1 最大值(max) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一 ...
- 2017北京国庆刷题Day2 morning
期望得分:100+100+40=240 实际得分:100+40+0=140 T1 一道图论神题(god) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK ...
- 2017北京国庆刷题Day4 morning
期望得分:0+40+30=70 实际得分:0+10+10=20 题目修改:只能由0变1,只能用一次操作 大模拟 #include<cstdio> #include<cstring&g ...
- 2017北京国庆刷题Day7 morning
期望得分:100+0+100=200 实际得分:100+20+0=120 离散化搞搞 #include<cstdio> #include<iostream> #include& ...
- 2017北京国庆刷题Day5 afternoon
期望得分:100+60+100=260 实际得分:0+60+40=100 设图中有m个环,每个环有si条边,有k条边不在环中 ans= (2^s1 -2)*( 2^s2 -2)* (2^s3 -2)… ...
- 2017北京国庆刷题Day3 afternoon
期望得分:100+0+30=130 实际得分:100+36.5+0=136.5 T3 一个变量写混了,丢了30.. 模拟栈 #include<cstdio> #include<cst ...
- 2017北京国庆刷题Day3 morning
期望得分:100+60+0=160 实际得分:100+30+0=130 考场上用的哈希 #include<cstdio> #include<cstring> #include& ...
随机推荐
- ubuntu安装nvidia驱动以及cuda教程
最近尝试在ubuntu中安装nvidia的显卡驱动以及cuda.花了近三天时间,真的如网上所说错误百出,期间甚至重装了一次ubuntu系统,搞到怀疑人生,整个都是泪- -.最终经过百般“磨难”总算安装 ...
- 洛谷——P3173 [HAOI2009]巧克力
P3173 [HAOI2009]巧克力 题目描述 有一块n*m的矩形巧克力,准备将它切成n*m块.巧克力上共有n-1条横线和m-1条竖线,你每次可以沿着其中的一条横线或竖线将巧克力切开,无论切割的长短 ...
- Luogu P1311 选择客栈
暴力 我一开始做这道题先想到的就是暴力... 所以先说一下暴力的做法.首先在输入的时候讲花费小于P的位置标记下来,然后用两层循环枚举所有的两个客栈的组合方案.再用一层循环将两个客栈之间的位置扫一遍,如 ...
- Python学习第二阶段Day2(json/pickle)、 shelve、xml、PyYAML、configparser、hashlib模块
1.json/pickle 略. 2.shelve模块 import shelve # shelve 以key value的形式序列化,value为对象 class Foo(object): de ...
- react入门----事件监听
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- BNUOJ 13358 Binary Apple Tree
Binary Apple Tree Time Limit: 1000ms Memory Limit: 16384KB This problem will be judged on Ural. Orig ...
- jsp之${CTX}理解
jsp之${CTX} 根据自己的需要选择以下标签. <%@ taglib uri="/struts-tags" prefix="s"%> <% ...
- mappingLocations、mappingDirectoryLocations与mappingJarLocations 区别 (转)
mappingLocations.mappingDirectoryLocations与mappingJarLocations 区别 由于spring对hibernate配置文件hibernate.cf ...
- codevs——1517 求一次函数解析式
1517 求一次函数解析式 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 相信大家都做过练习册上的这种 ...
- poj——2084 Game of Connections
Game of Connections Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8664 Accepted: 42 ...