打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
PATA1040题解(疑问)
#include<iostream>#include<vector>#include<algorithm>#include<cstring>#include<map>#include<set>#include<cstring>#include<stdio.h>using namespace std;char ch[5000];int len;/*  把第三个的判断方法和第二个的暴力方法结合在了一起,通过了*/int test(int i, int flag) {    int temp = -1, j, ans=-1e9;    if(flag == 1) {        temp = 1;        j = 1;        while((i-j>=0) && (i j<len) && (ch[i-j] == ch[i j])) {            j  ;            temp  = 2;        }        return temp;    }else {        if(ch[i-1] == ch[i]) {            temp = 0;            j = 1;            while((i-j>=0) && (i j-1<len) && (ch[i-j] == ch[i j-1])) {            j  ;            temp  = 2;            }            ans = temp;        }else if(ch[i 1] == ch[i]) {            temp = 0;            j = 1;            while((i-j 1>=0) && (i j<len) && (ch[i-j 1] == ch[i j])) {            j  ;            temp  = 2;            }            ans = max(temp,ans);        }        return ans;    }}int main() {    //FILE *fp = fopen("1.txt","r");    fgets(ch, 2000, stdin);    len = strlen(ch)-1;    int cur = 0, ans = 1;    for(int i = 0; i < len; i  ) {        cur = max(test(i,0),test(i,1));        ans = max(cur, ans);    }    cout << ans;}/* 第二个想的暴力解决方法,但是有两个测试点过不去,不知道什么地方错了。。int main() {    //FILE *fp = fopen("1.txt","r");    fgets(ch, 2000, stdin);    len = strlen(ch)-1;    int cur = 0, ans = 1;    for(int i = 0; i < len-1; i  ) {        for(int j = i 1; j < len; j  ) {            cur = 0;            for(int k = i, l = 0; k <= j; k  , l  ) {                    int rt = j-l, lt = i l;                    if(rt == lt) {                        cur  = 1;                        break;                    }                    if(rt < lt || ch[rt] != ch[lt]) break;                    cur  = 2;            }            ans = max(ans,cur);        }    }    cout << ans;}*//*最初想到的办法,分治,我觉得算法复杂度应该是nlgn,但实际运行起来很慢int test(int i, int flag) {    int temp = -1, j, ans=-1e9;    if(flag == 1) {        temp = 1;        j = 1;        while((i-j>=0) && (i j<len) && (ch[i-j] == ch[i j])) {            j  ;            temp  = 2;        }        return temp;    }else {        if(ch[i-1] == ch[i]) {            temp = 0;            j = 1;            while((i-j>=0) && (i j-1<len) && (ch[i-j] == ch[i j-1])) {            j  ;            temp  = 2;            }            ans = temp;        }else if(ch[i 1] == ch[i]) {            temp = 0;            j = 1;            while((i-j 1>=0) && (i j<len) && (ch[i-j 1] == ch[i j])) {            j  ;            temp  = 2;            }            ans = max(temp,ans);        }        return ans;    }}int traverse(int i, int j) {  if(i < 0 || j < 0) return 0;    if(i > j) return 0;    if(i == j) return 1;    int mid = (i j)/2;    int ans = max(traverse(i,mid), traverse(i 1,j));    int p = max(test(mid,0),test(mid,1));    return max(ans,p);}int main() {    FILE *fp = fopen("1.txt","r");   fgets(ch, 2000, fp);   len = strlen(ch) ;   cout << traverse(0, len-1);}*/
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
C语言练习题精选
Python100道练习题,建议收藏
NOI2019十二省联考-字符串问题解析 SAM 倍增 拓扑排序 排序
遗传算法C语言源码
367,二叉树的最大深度
用例
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服