【SRM 716 DIV 1 A】 ConstructLCS
Problem Statement
A string S is a subsequence of a string T if we can obtain S from T by erasing some (possibly all or none) of its characters. For example, “000” is a subsequence of “01010”. The longest common subsequence (LCS) of two strings A and B is a string C that is a subsequence of each of them and has the largest length among all strings with this property. Let f(A,B) be the length of the LCS of strings A and B. For example, we have f(“101”, “111000”) = 2, f(“101”, “110011”) = 3, and f(“00”, “1111”) = 0. You are given three small positive integers ab, bc, and ca. Please find three strings A, B, C such that:
Each of the strings contains only the characters ‘0’ and ‘1’.
The length of each string is between 1 and 1,000, inclusive.
f(A, B) = ab
f(B, C) = bc
f(C, A) = ca
Return a string formed as follows: A + ” ” + B + ” ” + C. (I.e., the returned string should contain the three strings A, B, C, separated by single spaces.) You may assume that a solution always exist. If there are multiple solutions you may return any of them.
Definition
Class:
ConstructLCS
Method:
construct
Parameters:
int, int, int
Returns:
string
Method signature:
string construct(int ab, int bc, int ca)
(be sure your method is public)
Limits
Time limit (s):
2.000
Memory limit (MB):
256
Stack limit (MB):
256
Constraints
ab will be between 1 and 50, inclusive.
bc will be between 1 and 50, inclusive.
ca will be between 1 and 50, inclusive.
Examples
0)
3
4
2
Returns: “101 1010101 1111”
The returned string corresponds to the following solution:
A = “1111”
B = “101”
C = “1010101”
We can easily verify that the only LCS of A and B is “11”, the only LCS of B and C is “101”, and the only LCS of C and A is “1111”.
1)
7
4
4
Returns: “10101010 1010101 1011”
There are other solutions like: A = “1110000”, B = “1110000”, C = “0000”.
2)
8
7
8
Returns: “110101001011 010101101 10101010”
3)
8
6
7
Returns: “110101010 10101010 1111010”
4)
15
17
19
Returns: “000100101101111011000 11110111010011101010 100100001010101001010101000011111”
5)
50
50
50
Returns:
“11111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111”
【题目链接】:
【题意】
让你构造出3个只包含数字0和1的字符串a,b,c;
给你3个数字ab,bc,ca
表示所要求的a和b的LCS长度为ab,b和C的LCS长度为….
【题解】
找出最大的两个数字;
它所代表的两条边,必然有同时连向同一个点x;
“a、b、c分别代表3个点”
设两条边的边权从大到小分别为a1,a2
则令x+=a1个’1’;
x+=a2个’0’;
然后令a1的另一端的点所代表的字符串为a1个’1’
同时a2的另一端的点所代表的字符串为a2个’0’
然后a3的话,可以不断的在只含‘0’的那个字符串的开头一直把‘0’换成1;直到满足a3为止.
【Number Of WA】
0
【反思】
想得太慢了,没来得及交上去QAQ;
狂跌100+rating;
下次要打div2了:(
【完整代码】
#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define Open() freopen("F:\\rush.txt","r",stdin)
#define Close() ios::sync_with_stdio(0)
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 110;
//head
struct abc{
int idx1,idx2,num;
};
abc a[4];
int b[4];
vector <pii> g[4];
string s[4];
class ConstructLCS
{
public:
string construct(int ab, int bc, int ca)
{
rep1(i,1,3) s[i]="";
a[1].idx1 = 1,a[1].idx2 = 2,a[1].num = ab;
a[2].idx1 = 2,a[2].idx2 = 3,a[2].num = bc;
a[3].idx1 = 1,a[3].idx2 = 3,a[3].num = ca;
sort(a+1,a+1+3,[&] ( abc a ,abc b) {return a.num > b.num;});
int ma = 0;
rep1(i,1,2){
int x = a[i].idx1,y = a[i].idx2;
b[a[i].idx1]++,b[a[i].idx2]++;
ma = max(ma,a[i].num);
g[x].pb(mp(y,a[i].num)),g[y].pb(mp(x,a[i].num));
}
int mid = 1;
rep1(i,1,3){
if (b[i]>1){
mid = i;
rep1(j,1,max(g[i][0].se,g[i][1].se))
s[i]+='1';
rep1(j,1,min(g[i][0].se,g[i][1].se))
s[i]+='0';
break;
}
}
int bigger = 0,smaller = 0;
rep1(i,1,3){
if (mid==i) continue;
if (bigger==0 && ma==g[i][0].se){
rep1(j,1,ma)
s[i]+='1';
bigger = i;
}
else{
rep1(j,1,g[i][0].se)
s[i]+='0';
smaller = i;
}
}
int t = a[3].num;
int now = 0;
while (t--){
s[smaller][now++] = '1';
}
return s[1] + ' ' + s[2] + ' ' + s[3];
}
};
【SRM 716 DIV 1 A】 ConstructLCS的更多相关文章
- 【TC SRM 718 DIV 2 B】Reconstruct Graph
[Link]: [Description] 给你两个括号序列; 让你把这两个括号序列合并起来 (得按顺序合并) 使得组成的新的序列为合法序列; 即每个括号都能匹配; 问有多少种合并的方法; [Solu ...
- 【TC SRM 718 DIV 2 A】RelativeHeights
[Link]: [Description] 给你n个数字组成原数列; 然后,让你生成n个新的数列a 其中第i个数列ai为删掉原数列中第i个数字后剩余的数字组成的数列; 然后问你这n个数列组成的排序数组 ...
- 【topcoder SRM 702 DIV 2 250】TestTaking
Problem Statement Recently, Alice had to take a test. The test consisted of a sequence of true/false ...
- 【codeforces 434 div 1 A】Did you mean...
[链接]h在这里写链接 [题意] 让你维护一段序列. 这段序列,不会出现连续3个以上的辅音. (或者一块全是辅音则也可以) (用空格可以断开连续次数); 要求空格最小. [题解] 模拟着,别让它出现连 ...
- 【如何使用jQuery】【jQuery弹出框】【jQuery对div进行操作】【jQuery对class,id,type的操作】【jquery选择器】
1.如何使用jQuery jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨 ...
- TopCoder SRM 667 Div.2题解
概览: T1 枚举 T2 状压DP T3 DP TopCoder SRM 667 Div.2 T1 解题思路 由于数据范围很小,所以直接枚举所有点,判断是否可行.时间复杂度O(δX × δY),空间复 ...
- 【three.js详解之一】入门篇
[three.js详解之一]入门篇 开场白 webGL可以让我们在canvas上实现3D效果.而three.js是一款webGL框架,由于其易用性被广泛应用.如果你要学习webGL,抛弃那些复杂的 ...
- 【iScroll源码学习04】分离IScroll核心
前言 最近几天我们前前后后基本将iScroll源码学的七七八八了,文章中未涉及的各位就要自己去看了 1. [iScroll源码学习03]iScroll事件机制与滚动条的实现 2. [iScroll源码 ...
- 【maven + hibernate(注解) +spring +springMVC】 使用maven搭建项目
研究,百度,查资料+好友帮助,使用MyEcplise2015工具,通过maven搭建hibernate+springMVC+spring的项目,数据库采用MySql5.5 不过使用的版本会在项目搭建过 ...
随机推荐
- Java事件处理机制2
实现一个小程序,怎样让小球受到键盘的控制,上下左右移动,如图: public class Demo3 extends JFrame{ MyPanel mp=null; public static vo ...
- UVa 10801 Lift Hopping【floyd 】
题意:给出n个电梯,每个电梯的运行时间,每个电梯只能在相应的楼层停靠,而且没有楼梯,再给出想去的楼层,问从0层能否到达想去的楼层,求到达的最短时间 建图还是没有建出来--- 因为n<100,可以 ...
- luogu P4018 Roy&October之取石子(博弈论)
题意 题解 如果n是6的倍数,先手必败,否则先手必胜. 因为6*x一定不是pk 所以取得话会变成6*y+a的形式a=1,2,3,4,5: 然后a一定为质数.我们把a取完就又成为了6*x的形式. 又因为 ...
- BZOJ 2342 [Shoi2011]双倍回文(manacher+堆+set)
题意 N<=500000 题解 维护一个set可以用堆来解决. #include<iostream> #include<cstring> #include<cstd ...
- mysql日期加减运算
MySQL 日期类型MySQL 日期类型:日期格式.所占存储空间.日期范围 比较. 日期类型 存储空间 日期格式 日期范围 --------- ...
- Vim配置及使用
Vim配置 1.打开~/.vimrc,将以下内容考入文件.vimrc中 "行号" set nu "高亮" syntax enable syntax on &qu ...
- Github README.md中添加图片
1.先把图片上传到你的项目中:然后在github网站上按路径打开图片,如下打开的图片链接: 2.复制图片的地址 3.然后在README.md写上:  注意 ...
- NYIST 1006 偷西瓜
偷西瓜 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 对于农村的孩子来说最大的乐趣,莫过于和小伙伴们一块下地偷西瓜了,虽然孩子们条件不是很好,但是往往他们很聪明,他 ...
- how to deal with "no such file error or diretory" error for a new programmer in QT creator
when i try to develop a hello demo in QT creator with the code following : #include<QApplication& ...
- 公布Qt Widgets桌面应用程序的方法
公布Qt Widgets桌面应用程序的方法 Qt是一款优秀的跨平台开发框架,它能够在桌面.移动平台以及嵌入式平台上执行.眼下Qt 5介绍程序公布的文章帖子比較少.大家又很想要知道怎样公布Qt应用程序, ...