hrbust 1481
/* 构造特定条件的68序列:给定目标串中6 8 68 86 这四种字串的个数a b p q ,输出所有满足条件的字符串中代表的数字最小的那个
// hrboj 1481 _______________________________________________________________________
//#include<bits/stdc++.h>
#include<iostream>
#include<string>
#include<cstdio> using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
#define pb(x) push_back(x)
#define ss(x) scanf("%s",x)
#define sd(x) scanf("%d",&x)
#define sll(x) scanf("lld",&x)
typedef unsigned long long ull;
#define mem(A, X) memset(A, X, sizeof A)
#define ford(i,l,u) for(ll (i)=(ll)(l);(i)>=(ll)(u);--(i))
#define foreach(e,x) for(__typeof(x.begin()) e=x.begin();e!=x.end();++e)
#define fori(i,l,u) for(ll (i)=(ll)(l);(i)<=(ll)(u);++(i))
#define delete_this freopen("in.txt","r",stdin)
#define sd2(x,y) scanf("%d%d",&x,&y)
#define slf(x) scanf("%lf",&x)
#define sc(x) scanf("%c",&x)
#define sec second
#define fir first const ll mod=1e9+7;
const ll maxn=1e5+10;
int a,b,p,q;
void out6(int a )
{
fori(i,1,a) printf("6");
}
void out8(int a )
{
fori(i,1,a) printf("8");
}
void out68(int a )
{
fori(i,1,a) printf("68");
}
int main()
{
//delete_this;
while(cin>>a)
{
cin>>b>>p>>q;
int flag=1;
if(a==p)
{ if(q==p)
{ if(b>=p+1)
{
flag=0;
out8(1);
out68(p);
out8(b-p-1);
}
}
else if(q==p-1)
{
if(b>=p)
{
flag=0;
out68(p);
out8(b-p);
}
} }
else if(a>p)
{
if(q==p)
{
if(b>=p)
{
flag=0;
out6(a-(p+1));
out68(p);
out8(b-p);
out6(1);
}
}
else if(q==p-1)
{
if(b>=p)
{
flag=0;
out6(a-p);
out68(p);
out8(b-p);
}
}
else if(q==p+1)
{
if(b>=p+1)
{
flag=0;
out8(1);
out6(a-p-1);
out68(p);
out8(b-p-1);
out6(1);
}
} } if(flag) puts("-1");
else puts("");
} return 0;
} /*
分析: 记目标串有a个6,b个8,p个68子串,q个86子串。
6和8的个数是固定的,于是字符串的长度固定。 现在尝试对所有可能存在解的情况进行构造。
这里选择a,p的个数的关系分情况进行讨论,并在之后选择优先放置68 86这类子串(反过来的话可能会比较复杂)。
所有的可能存在解的情况分为(1)a==p (2)a>p
note : 构造类的问题 分类逻辑分支都进行讨论到 是很关键的,在保证不重不漏的情况尽量简化。
此外有一些很好的思路: 考虑某些关键性变量,通过进行限制,减少分类的情况进行简化。比如这里选择68为分类标准。
考虑那些确定的量 ,单个6 8的个数,因为其没有重复,可以作为考虑的依据和数字长度的确定。
考虑构造的先后次序,哪些重要,哪些不重要。这里优先68 然后86。之后的单个数字就很好处理了
debug : 68可能比86少一个是有可能的,即代码中的else if q==p+1的这一分支, 具体的例子 比如 868686,2个68,3个86.
optimize: 一些重复性的操作---->函数简化。
只考虑可能产生解的逻辑分支,其他else不管。
*/
hrbust 1481的更多相关文章
- 动态规划(背包问题):HRBUST 1377 金明的预算方案
金明的预算方案 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行 ...
- [ An Ac a Day ^_^ ] hrbust 2291 Help C5 分形
开博客这么久从来没写过自己学校oj的题解 今天写一篇吧 嘿嘿 原题链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProble ...
- hrbust 2384 相同的不相同的字符串
Description 研究证明,汉的字阅读序顺是不会影响你明白这句话的意思的. 但是如果顺序差的太多也是会影响的,比如汉阅读顺的序字你就看不懂什么意思了. 那么多少算多呢?科学家芦苇给出证明,当两个 ...
- HRBUST - 2358 Magic network
HRBUST - 2358 思路:dfs序 + 树状数组 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimiz ...
- POJ 3660 Cow Contest / HUST 1037 Cow Contest / HRBUST 1018 Cow Contest(图论,传递闭包)
POJ 3660 Cow Contest / HUST 1037 Cow Contest / HRBUST 1018 Cow Contest(图论,传递闭包) Description N (1 ≤ N ...
- HDU 1611 敌兵布阵 / HRBUST 1794 敌兵布阵(线段树)
HDU 1611 敌兵布阵 / HRBUST 1794 敌兵布阵(线段树) Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A ...
- The Die Is Cast(poj 1481简单的双dfs)
http://poj.org/problem?id=1481 The Die Is Cast Time Limit: 1000MS Memory Limit: 10000K Total Submi ...
- hrbust 1621 迷宫问题II 广搜
题目链接:http://acm.hrbust.edu.cn/vj/index.php?/vj/index.php?c=&c=contest-contest&cid=134#proble ...
- 两次DFS,POJ(1481)
题目链接:http://poj.org/problem?id=1481 两次DFS,这里的思路是,没找到*,就说明,有一个骰子,因此,每搜索到一个*,深搜4个方向,并且变为'.',要是搜到'X',就是 ...
随机推荐
- ByteArrayBuilder
public class ByteArrayBuilder : IDisposable { #region Constants /// <summary> /// True in a by ...
- AngularJs的UI组件ui-Bootstrap分享(八)——Tooltip和Popover
tooltip和popover是轻量的.可扩展的.用于提示的指令.对于移动端来讲,这两个指令虽然可以正常工作,但是从用户体验的角度并不推荐使用. 先说tooltip,tooltip有三种使用方式: ( ...
- 译:Boost Property Maps
传送门:Boost Graph Library 快速入门 原文:Boost Property Map 图的抽象数学性质与它们被用来解决具体问题之间的主要联系就是被附加在图的顶点和边上的属性(prope ...
- 如何通过JDBC访问数据库
Java数据库连接(JDBC)用与在Java程序中实现数据库操作功能,它提供了执行SQL语句.访问各种数据库的方法,并为各种不同的数据库提供统一的操作接口,java.sql包中包含了JDBC操作数据库 ...
- EL和JSTL专题
EL简介 EL全名为Expression Language,它原本是JSTL 1.0为方便存取数据所自定义的语言.当时只能在JSTL标签中使用,如下: <c:out value="${ ...
- mysql 大小写问题-sql-mode问题
一.mysql 字段名 表名 数据库名 是否区分大小写 今天碰到数据库大小写问题,linux与windows下问题 同时又碰到保留字 http://www.cnblogs.com/lawdong/ar ...
- Go语言并发编程示例 分享(含有源代码)
GO语言并发示例分享: ppt http://files.cnblogs.com/files/yuhan-TB/GO%E8%AF%AD%E8%A8%80.pptx 代码, 实际就是<<Go ...
- Python编码问题:UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(12
今天安装了PyScripter编辑器,刚要写代码,突然就出现异常: <span style="font-size:14px;color:#ff0000;">>&g ...
- gantt甘特图的制作过程
甘特图主要是用来做项目管理的,可以清楚的看到任务间的逻辑关系,任务与时间关系和任务间并行关系. 在甘特图中,横轴方向表示时间,纵轴方向并列着活动列表.图表内可以用线条.数字.文字代号等来表示计划(实际 ...
- docker之文件夹共享
本文采用的是CoreOS操作系统 1.共享宿主机的目录给容器 docker run -d --name=test -v /opt/test:/usr/databases docker-test tes ...