UVa Problem 10132 File Fragmentation (文件还原) 排列组合+暴力
题目说每个相同文件(01串)都被撕裂成两部分,要求拼凑成原来的样子,如果有多种可能输出一种。
我标题写着排列组合,其实不是什么高深的数学题,只要把最长的那几个和最短的那几个凑一起,然后去用其他几个验证就行了,反正我的验证是非常暴力的,看起来。。。(其实加了个二维数组判定不是很吃复杂度)
代码:
#include <string>
#include <cstring>
#include <stdio.h>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn = 150; string p[maxn];
int n, cnt, min, max;
bool flag, used[maxn]; bool cmp (string a, string b) {
return a.size() < b.size();
} bool check(string str) {
for (int i = 0; i < cnt; i++)
for (int j = 0; j < cnt; j++) {
if (!used[i] && !used[j] && p[i] + p[j] == str)
used[i] = used[j] = true;
}//for
for (int i = 0; i < cnt; i++)
if (used[i] == false)
return false;
return true;
} int main() {
cin >> n;
getline(cin, p[0]);
getline(cin, p[0]);
while(n--) {
cnt = 0;
while (getline(cin, p[cnt]) && !p[cnt].empty()) cnt++;
sort(p, p + cnt, cmp);
flag = false;
for (int i = 0; !flag && p[i].size() == p[0].size(); i++)
for (int j = cnt - 1; !flag && p[j].size() == p[cnt - 1].size(); j--) {
memset(used, 0, sizeof(used));
used[i] = used[j] = 1;
if (check(p[i] + p[j])) {
cout << p[i] + p[j] << endl;
flag = true;
break;
}//if
memset(used, 0, sizeof(used));
used[i] = used[j] = 1;
if (check(p[j] + p[i])) {
cout << p[j] + p[i] << endl;
flag = true;
break;
}//if
}//for
if (n)
printf("\n");
}//while
return 0;
}
UVa Problem 10132 File Fragmentation (文件还原) 排列组合+暴力的更多相关文章
- UVa 10132 - File Fragmentation
题目大意:有n个相同的文件,每个文件从中间分为两半,现在给你这2n个文件碎片,求原来完整的文件. 找出文件碎片长度的最大值和最小值,二者相加可得到原来文件的长度len.然后逐个进行拼接,将拼接后长度等 ...
- UVA 10098 用字典序思想生成所有排列组合
题目: Generating permutation has always been an important problem in computer science. In this problem ...
- uva 11174 Stand in a Line (排列组合)
UVa Online Judge 训练指南的题目. 题意是,给出n个人,以及一些关系,要求对这n个人构成一个排列,其中父亲必须排在儿子的前面.问一共有多少种方式. 做法是,对于每一个父节点,将它的儿子 ...
- matlab之编写函数m文件计算排列组合Cnm
function y=myfun(n) y=1; for i in 1:n; y=y*(m-i+1)/i; end 给y赋初值 给i遍历 计算每一项的乘积之和 注意:要保存函数的名字为myfun,因为 ...
- Codeforces Round #181 (Div. 2) C. Beautiful Numbers 排列组合 暴力
C. Beautiful Numbers 题目连接: http://www.codeforces.com/contest/300/problem/C Description Vitaly is a v ...
- Navicat操作SQL server 2008R2文件.bak文件还原
项目操作过程中,利用Navicat操作SQL Server2008R2数据备份,结果发现数据丢失了很多,不得不先对数据丢失部分进行差异对比,然后再重新输入. 1.利用Navicat导出的数据格式为sq ...
- MSSQL在线文件还原脚本
在线文件还原:如果比较大的MSSQL数据库的损坏只是集中在其中某一个文件或者文件组上,使用在线文件还原技术,只是把坏掉的数据文件或者文件组重建,能节约很多时间.以下是测试脚本(假设损坏的文件时Trn0 ...
- MySQL frm+ibd文件还原data的办法【数据恢复】
MySQL frm+ibd文件还原data的办法[数据恢复] 此方法只适合innodb_file_per_table = 1 当误删除ibdata 该怎么办? 如下步骤即可恢复: 1 ...
- JAVASE02-Unit06: 文件操作——File 、 文件操作—— RandomAccessFile
Unit06: 文件操作--File . 文件操作-- RandomAccessFile java.io.FileFile的每一个实例是用来表示文件系统中的一个文件或目录 package day06; ...
随机推荐
- 要后台控制前台的的CSS样式,我们可以加入ASP.NET Literal 控件
ASP.NET Literal 控件,用于在页面上显示文本.此文本是可编程的. 我用它来制作了 ) { this.LtdMemberPromotion7.Text = "<style ...
- inputs
inputs.bind({ keyup:function(){$(this).val($(this).val().replace(/\D/g,''));}, focus:function(){if($ ...
- JavaScript神一样的变量系统
话说上一篇介绍了JavaScript故事版的身世之谜.看官你估计也明白JavaScript出生之时,就未曾托于重任.布兰登-艾奇估计也没料到今天的JavaScript变得如此重要.要不然,当年他也不会 ...
- My集合框架第二弹 二叉树的实现
package com.wpr.collection; import java.util.NoSuchElementException; public class BinarySearchTree&l ...
- SQLServer获取随机数据
1.比较常见和好用的一种 SELECT TOP 10 *, NEWID() AS randomFROM tableORDER BY random --newid函数会随机生成一个guid,很长的一个字 ...
- extjs表格下的分页条——Ext.grid.Panel 的 pagingtoolbar
两种分页条:每页固定条数的分页条 和 自定义选择每页内容条数的分页条 一.每页固定条数的分页条 这种样式的-- dockedItems: [{ xtype: 'pagingtoolbar', stor ...
- socat : Some useful commands
http://technostuff.blogspot.com/2008/10/some-useful-socat-commands.html MONDAY, OCTOBER 6, 2008 Some ...
- DevExpress 13.2.6源码、安装包、汉化包下载和教程
DevExpress比DotNetBar控件成熟很多,当然源码是公开的,但是最新版本需要9K多.如果不是土豪,用已经破解的版本或者自己拿源码编译一份就可以了,老外就是这么好. 首先在这里下载然后解压准 ...
- HTTP状态码通常分为5种类型
HTTP状态码通常分为5种类型,分别以1-5五个数字开头,由3位整数组成: -------------------------------------------------------------- ...
- Codeforces Round #308 (Div. 2) C. Vanya and Scales dfs
C. Vanya and Scales Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/552/p ...