Problem F. Matrix Game XVII Open Cup named after E.V. Pankratiev||字符串最大表示法
来源:互联网 发布:移动网络优化设置 编辑:程序博客网 时间:2024/06/11 21:04
题目:
模板题,最大表示法,对字符串预处理一下就好了。
AC代码:
/*2017年8月30日10:41:29Problem F. Matrix Game字符串的最大表示法 直接用模板 AC*/#include <iostream>#include <map>#include <set>#include <string>#include <cstring>#include <cstdio>#include <algorithm>#include <cmath>#include <queue>#include <vector> using namespace std;const int maxn=110;string a[maxn],b[maxn],ans;int n,m;bool cmp(const string &a,const string &b){return a>b;}int get_max(string s)//最大表示法{ int len=s.size(); int i=0,j=1,k=0; while(i<len&&j<len) { k=0; while(s[(i+k)%len]==s[(j+k)%len]&&k<len) k++; if(k>=len) break; if(s[(i+k)%len]<s[(j+k)%len]) { i=i+k+1; if(i==j) j++; } else { j=j+k+1; if(j==i) i++; } } return min(i,j);}int MaxRep(string s, int l) { int i,j,k; i=0;j=1;k=0; while(i<l&&j<l) { k=0; while(s[i+k]==s[j+k]&&k<l) k++; if(k==l) return i; if(s[i+k]<s[j+k]) //??3é′óóú?íê?×?D?±íê? if(i+k+1>j) i=i+k+1; else i=j+1; else if(j+k+1>i) j=j+k+1; else j=i+1; } if(i<l) return i; else return j; } void init(){for(int i=0;i<n;i++){cin>>a[i];}for(int i=0;i<n;i++){for(int j=0;j<m;j++){b[j]+=a[i][j];}}}void solve(){//先对行处理 sort(a,a+n,cmp); for(int i=0;i<n;i++){string t=a[i];for(int j=0;j<n;j++){if(i!=j){t+=a[j];}}//int p=MaxRep(t,t.size());//找到最大字典序的起始位置 int p=get_max(t);string pre=t.substr(0,p);//把起始位置前面的取出来 t.erase(0,p);//在原串中删掉 t+=pre;//加到以最大字典序为起点的后面 ans=max(ans,t);//比较大小 }//再对列处理 sort(b,b+m,cmp);for(int i=0;i<m;i++){string t=b[i];for(int j=0;j<m;j++){if(i!=j){t+=b[j];}}//int p=MaxRep(t,t.size());int p=get_max(t);string pre=t.substr(0,p);t.erase(0,p);t+=pre;ans=max(ans,t);}int len=ans.size();for(int i=0;i<len;i++){if(ans[i]!='0'){for(int j=i;j<len;j++){putchar(ans[j]);}puts("");return ;}} }int main(){scanf("%d%d",&n,&m);init();solve();return 0;}
阅读全文
0 0
- Problem F. Matrix Game XVII Open Cup named after E.V. Pankratiev||字符串最大表示法
- XVII Open Cup named after E.V. Pankratiev. Eastern Grand Prix. Problem F. Buddy Numbers 贪心、数论、构造
- XVII Open Cup named after E.V. Pankratiev. Eastern Grand Prix. Problem G. Gmoogle 模拟、字符串处理、文本搜索
- Problem A. Arithmetic Derivative-XVII Open Cup named after E.V. Pankratiev||找规律&数学&DFS
- Problem D. Clones and Treasures XVII Open Cup named after E.V. Pankratiev||简单模拟
- Problem L. Canonical duel XVII Open Cup named after E.V. Pankratiev||并查集
- XVII Open Cup named after E.V. Pankratiev. XXI Ural Championship G glassese of solutions
- XVII Open Cup named after E.V. Pankratiev. Grand Prix of SPb D cutting potatoes
- XVII Open Cup named after E.V. Pankratiev Problem I. Rage Minimum Query 手写小根堆、卡时间+卡内存、或者随机化
- 【opencup】XVI Open Cup named after E.V. Pankratiev. GP of SPB K.Captain Tarjan【树形dp】
- hdu 3374 String Problem(字符串最小最大表示法+kmp)
- hdu3374String Problem kmp+最大最小表示法
- hdu 3374 String Problem(KMP+字符串最小最大表示)
- Problem F CodeForces 16E
- Problem F: Matrix Problem (II) : Array Practice
- Problem F 字符串替换
- Problem E: Matrix Problem : Array Practice
- 最大流----F - Flow Problem
- 学习jemeter时遇到的问题(正则表达式格式与匹配)
- 第三十一篇:JAVA解析HTML
- C++ 虚函数和纯虚函数的区别
- linux 函数学习--kzalloc()
- HDU 4035 Maze (概率DP)
- Problem F. Matrix Game XVII Open Cup named after E.V. Pankratiev||字符串最大表示法
- StringBuilder &&StringBuffer删除最后一个字符的方法
- maven项目使用本地jar包
- 清除xocde垃圾文件
- 剑指offer第十题(矩形覆盖)
- Uva 725 Division
- java环境配置gradle-3.1,ideaIU-2017.2.2,jdk-8u121-windows-x64
- windows10 和ubantu的双系统安装
- 关于缓存