A Great Alchemist
Time limit : 2sec / Stack limit : 256MB / Memory limit : 256MB
Problem
Carol is a great alchemist.
In her world, each metal has a name of 2N (N is an integer) letters long, which consists of uppercase alphabets.
Carol can create metal S3 from S1 and S2 alchemical when she can make the name of S3 by taking N letters each from S1 and S2 then rearranging them properly.
You are given 3 names of the metal S1, S2, S3. Determine wether Carol can create S3 from S1 and S2 or not.
Input
The input will be given in the following format from the Standard Input.
S1
S2
S3
On the first line, you will be given the name of the first metal material S1.
On the second line, you will be given the name of the second metal material S2.
On the third line, you will be given the name of the metal S3, which Carol wants to create.
Each character in the S1, S2, and S3 will be an uppercase English alphabet letter.
Each string S1, S2 and S3 has same number of letters and the number is always even.
It is guaranteed that 2≦|S1|≦100000
Output
If Carol can create S3 from S1 and S2, output YES, if not, output NO in one line. Make sure to insert a line break at the end of the output.
Input Example 1
AABCCD
ABEDDA
EDDAAA
Output Example 1
YES
You can make EDDAAA by picking AAD from the first metal, and AED from the second metal.
Input Example 2
AAAAAB
CCCCCB
AAABCB
Output Example 2
NO
To make AAABCB, you have to take at least four letters from the first material. So this can't be created alchemical.
用回溯法TLE。看了同学的代码,在执行回溯前执行一些检查就能过了。哎。
#include <iostream>
#include <string>
#include <vector>
using namespace std; bool backtrack(string &S3, int charsFromS1, int charsFromS2, int current,
vector<int> &charsInS1, vector<int> &charsInS2) {
if (current >= S3.length()) return true;
char index = S3[current] - 'A';
if (charsInS1[index] > && charsFromS1 < S3.length() / ) {
charsInS1[index]--;
if (backtrack(S3, charsFromS1 + , charsFromS2, current + , charsInS1, charsInS2)) return true;
charsInS1[index]++;
}
if (charsInS2[index] > && charsFromS2 < S3.length() / ) {
charsInS2[index]--;
if (backtrack(S3, charsFromS1, charsFromS2 + , current + , charsInS1, charsInS2)) return true;
charsInS2[index]++;
}
return false;
} int main(int argc, char** argv) {
string S1, S2, S3;
cin >> S1 >> S2 >> S3;
vector<int> charsInS1(, ), charsInS2(, ), charsInS3(, ); for (int i = ; i < S1.length(); ++i) {
charsInS1[S1[i] - 'A']++;
charsInS2[S2[i] - 'A']++;
charsInS3[S3[i] - 'A']++;
} int common13 = , common23 = ;
for (int i = ; i < ; ++i) {
if (charsInS3[i] > charsInS1[i] + charsInS2[i]) {
cout << "NO" << endl;
return ;
}
common13 += min(charsInS3[i], charsInS1[i]);
common23 += min(charsInS3[i], charsInS2[i]);
} if (common13 < S3.length() / || common23 < S3.length() / ) {
cout << "NO" << endl;
} else {
bool ans = backtrack(S3, , , , charsInS1, charsInS2);
cout << (ans ? "YES" : "NO") << endl;
}
return ;
}
A Great Alchemist的更多相关文章
- atcoder之A Great Alchemist
C - A Great Alchemist Time limit : 2sec / Stack limit : 256MB / Memory limit : 256MB Problem Carol i ...
- A Great Alchemist 最详细的解题报告
题目来源:A Great Alchemist A Great Alchemist Time limit : 2sec / Stack limit : 256MB / Memory limit : 25 ...
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- IELTS - Word List 28
1, The lawsuit is very much o the lawyer's mind. 2, The canteen was absolutely packed. 3, Doctors di ...
- 爹地,我找到了!,15个极好的Linux find命令示例
爹地,我找到了!, 15个极好的Linux find命令示例 英文原文:Daddy, I found it!, 15 Awesome Linux Find Command Examples 标签: L ...
- .NET 使用CouchBase 基础篇
2011年2月,CouchOne和memebase合并后,改名为Couchbase,官网地址(www.couchbase.com).membase最后一个版本为1.7.2,可在Couchbase的官网 ...
- English sentence
For a better environment, we should teach our children to put litter/garbage/trash into dustbin/dust ...
- 2016.10.08,英语,《Verbal Advantage》Level1 Unit1-4
这本书学的很辛苦,总共10个Level,每个Level有5个Unit,每个Unit10个单词,实际上自己差不多一天才能学完1个Unit10个单词.(当然,一天我只能花大约1个小时左右在英语上) 而且跟 ...
- 30个实用的Linux find命令
除了在一个目录结构下查找文件这种基本的操作,你还可以用find命令实现一些实用的操作,使你的命令行之旅更加简易.本文将介绍15种无论是于新手还是老鸟都非常有用的Linux find命令 . 首先,在你 ...
随机推荐
- CSS总结2
1.动画: transform:rotate(10deg): transform:scale(2), scaleY(2), scaleX(2), scale(1,1) scale(-1)---让 ...
- Docker中自动化搭建Hadoop2.6完全分布式集群
这一节将在<Dockerfile完成Hadoop2.6的伪分布式搭建>的基础上搭建一个完全分布式的Hadoop集群. 1. 搭建集群中需要用到的文件 [root@centos-docker ...
- HTML元素的offsetWidht、clientWidth、scrollWidth属性区别
每个HTML元素都有以下属性 offsetWidth:内容+内边距(padding)+边框+滚动条宽度,以css像素返回它的屏幕尺寸. offsetHeight:(同上) offsetLeft:如果o ...
- [转]Modernizr的介绍和使用
转载自:http://blog.chinaunix.net/uid-21633169-id-4286857.html 传统浏览器目前不会被完全取代,令你难以将最新的 CSS3 或 HTML5 功能嵌入 ...
- 把文本框嵌入到form
<form action="/submit-cat-photo"> <input type="text" placeholder=" ...
- get请求
写在前面的话 XMLHttpRequest对象的open方法的第一个参数为request-type,取值可以为get或post.本篇介绍get请求. get请求的目的,主要是为了获取数据.虽然get请 ...
- [R语言]foreach和doParallel包实现多个数据库同时查询
R语言在进行数据库查询时,每执行一条语句,都会阻塞.直到查询语句返回结果之后,才会进行下一条语句. 为了能够实现同时对多个数据库进行查询,以节省顺序执行下来的时间,首先考虑通过多线程来进行数据库查询. ...
- BZOJ 2882 & 后缀数组的傻逼实现
题意: 一个字符环,求一个开头使字典序最小. SOL: 后缀数组打起来...然后居然卡过...10sec的实现我10936ms...居然卡过??? rank倒三...啦啦啦啦啦.... 改个离散化会不 ...
- Leetcode Partition List
Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...
- Codeforces Round #228 (Div. 2) B. Fox and Cross
#include <iostream> #include <string> #include <vector> #include <algorithm> ...