/*  构造特定条件的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的更多相关文章

  1. 动态规划(背包问题):HRBUST 1377 金明的预算方案

    金明的预算方案 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行 ...

  2. [ An Ac a Day ^_^ ] hrbust 2291 Help C5 分形

    开博客这么久从来没写过自己学校oj的题解 今天写一篇吧 嘿嘿 原题链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProble ...

  3. hrbust 2384 相同的不相同的字符串

    Description 研究证明,汉的字阅读序顺是不会影响你明白这句话的意思的. 但是如果顺序差的太多也是会影响的,比如汉阅读顺的序字你就看不懂什么意思了. 那么多少算多呢?科学家芦苇给出证明,当两个 ...

  4. HRBUST - 2358 Magic network

    HRBUST - 2358 思路:dfs序 + 树状数组 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimiz ...

  5. 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 ...

  6. HDU 1611 敌兵布阵 / HRBUST 1794 敌兵布阵(线段树)

    HDU 1611 敌兵布阵 / HRBUST 1794 敌兵布阵(线段树) Description C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A ...

  7. 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 ...

  8. hrbust 1621 迷宫问题II 广搜

    题目链接:http://acm.hrbust.edu.cn/vj/index.php?/vj/index.php?c=&c=contest-contest&cid=134#proble ...

  9. 两次DFS,POJ(1481)

    题目链接:http://poj.org/problem?id=1481 两次DFS,这里的思路是,没找到*,就说明,有一个骰子,因此,每搜索到一个*,深搜4个方向,并且变为'.',要是搜到'X',就是 ...

随机推荐

  1. C/C++函数调用的几种方式及函数名修饰规则以及c++为什么不允许重载仅返回类型不同的函数

    我们知道,调用函数时,计算机常用栈来存放函数执行需要的参数,由于栈的空间大小是有限的,在windows下栈是向低地址扩展的数据结构,是一块连续的内存区域.这句话的意思是栈顶的地址和栈的最大容量是系统预 ...

  2. http状态消息

    1-5状态码了解 1XX 表示信息(消息) 2XX 表示成功 3XX 表示重定向 4XX 表示请求错误 *** 5XX 表示服务端错误 常见状态码 200 请求成功 一切正常 301 重定向,修改后的 ...

  3. java获取日期 昨天 今天 明天的日期

    Date date=new Date();//取时间 Calendar calendar = new GregorianCalendar(); calendar.setTime(date); cale ...

  4. 第五篇——C++实现四则运算

    写一个能自动生成小学四则运算题目的命令行 “软件”, 分别满足下面的各种需求.下面这些需求都可以用命令行参数的形式来指定: a) 除了整数以外,还要支持真分数的四则运算. (例如: 1/6 + 1/8 ...

  5. Android 数据库管理— — —添加数据

    <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...

  6. C#如何获取物理网卡,虚拟网卡,以及无线网卡

    就不废话了,直接上代码 /// <summary></summary> /// 显示本机各网卡的详细信息 /// <summary></summary> ...

  7. 北大poj-1091

    跳蚤 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9591   Accepted: 2892 Description Z ...

  8. (spring-第20回【AOP基础篇】)Spring与事务

    要想了解Spring的事务,首先要了解数据库事务的基本知识,数据库并发会产生很多问题,Spring使用ThreadLocal技术来处理这些问题,那么我们必须了解Java的ThreadLocal技术.下 ...

  9. PHP开发调试环境配置(基于wampserver+Eclipse for PHP Developers )

    1 软件准 WampServer 下载地址:http://www.wampserver.com/en/#download-wrapper    我下的是 里面包含了搭建PHP必须的4个软件:   1. ...

  10. jQuery $.each用法[转]

    jQuery $.each用法 以下内容非原创,来自百度文库http://wenku.baidu.com/view/4796b6145f0e7cd18425368e.html 通过它,你可以遍历对象. ...