暴力枚举--uva10132
来源:互联网 发布:ubuntu 网络配置 编辑:程序博客网 时间:2024/06/05 23:54
给出一个串不同断点位置分成的不同两段组的组,求原串。
思路:
暴力求解,先求出最短串的长和最长串的长相加作为原串的长,然后将所有满足这个串长得字符串各自前后的组合方式都组合一遍,最多组合方式对应的串就是原串啦
代码:
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<string>using namespace std;const int maxn = 1005;int n ,l, k;struct node { char str[maxn]; int len;}s[maxn];char a[maxn][maxn];bool cmp(node a, node b) { return a.len<b.len;}int cmp2(const void*_a, const void*_b) { return strcmp((char*)_a, (char*)_b);}void input() { int i=0; while(gets(s[i].str)) { if(!s[i].str[0]) break; s[i].len = strlen(s[i].str); i++; } n = i;}void deal() { int i, j; k=0; memset(a, 0, sizeof(a)); for(i=0; i<n; i++) for(j=i+1; j<n; j++) { if(s[i].len+s[j].len==l) { strcat(a[k], s[i].str); strcat(a[k++], s[j].str); strcat(a[k], s[j].str); strcat(a[k++], s[i].str); } }}int main() { int kase; int i; scanf("%d", &kase); getchar(); getchar(); while(kase--) { input(); sort(s, s+n, cmp); l = s[0].len+s[n-1].len; deal(); int count=1, mcount=0; qsort(a, k, sizeof(a[0]), cmp2); int flag; for(i=0; i<k-1; i++) { if(strcmp(a[i],a[i+1]) == 0) count++; else { if(mcount<count) { flag = i; mcount=count; } count = 1; } } if(mcount > count) printf("%s\n", a[flag]); else printf("%s\n", a[k-1]); if(kase) printf("\n"); } return 0;}
0 0
- 暴力枚举--uva10132
- [暴力]uva10132 File Fragmentation
- UVa10132
- uva10132
- uva10132
- 暴力枚举
- 暴力枚举?
- 暴力枚举
- 暴力枚举
- 暴力枚举
- poj 3102(暴力枚举)
- hdu 3332 暴力枚举
- BNU - Candles - 暴力枚举
- poj1222(暴力枚举)
- Coin Change(暴力枚举)
- HDU 3823 暴力枚举
- hdu1015 Safecracker (暴力枚举)
- hdu1172(暴力枚举)
- SQL PRIMARY KEY 约束
- java根据ip地址获取详细地域信息
- PHP
- Linux下安装Matlab2014及破解
- 路径规划A*算法及SLAM自主地图创建导航算法
- 暴力枚举--uva10132
- P问题,NP问题,NPC问题,NP-H问题比较
- sql 千万级数据表新建索引
- arc下内存泄漏的解决小技巧
- SwipeRefreshLayout的使用注意事项
- UITabBarItem不能显示文字和图片
- 多线程的实现
- POJ 2674 Linear world (经典题目 -- 这个有坑= =)
- iOS 自动布局详细介绍