USACO Section 1.3 : Calf Flac (calfflac)

题意:据说假设你给无限仅仅母牛和无限台巨型便携式电脑(有很大的键盘),那么母牛们会制造出世上最优秀的回文。

你的工作就是去寻找这些牛制造的奇观(最优秀的回文)。

在寻找回文时不用理睬那些标点符号、空格(但应该保留下来以便做为答案输出),仅仅用考虑字母‘A‘-‘Z‘和‘a‘-‘z‘。要你寻找的最长的回文的文章是一个不超过20,000个字符的字符串。 我们将保证最长的回文不会超过2,000个字符(在除去标点符号、空格之前)。

暴力 注意一些细节 输入字符中有回车啊之类的 wins下 输完按回车按Ctrl+z再按回车即可了

ubuntu下是Ctrl+z

代码:

#include <algorithm>

#include <iostream>

#include <sstream>

#include <cstdlib>

#include <cstring>

#include <iomanip>

#include <cstdio>

#include <string>

#include <bitset>

#include <vector>

#include <queue>

#include <stack>

#include <cmath>

#include <list>

#include <map>

#include <set>

#define sss(a,b,c) scanf("%d%d%d",&a,&b,&c)

#define mem1(a) memset(a,-1,sizeof(a))

#define mem(a) memset(a,0,sizeof(a))

#define ss(a,b) scanf("%d%d",&a,&b)

#define s(a) scanf("%d",&a)

#define INF 0x3f3f3f3f

#define w(a) while(a)

#define PI acos(-1.0)

#define LL long long

#define eps 10E-9

#define N 100010<<1

#define mod 1000000000+7

using namespace std;

void mys(int& res)

{

int flag=0;

char ch;

while(!(((ch=getchar())>=‘0‘&&ch<=‘9‘)||ch==‘-‘))

if(ch==EOF)  res=INF;

if(ch==‘-‘)  flag=1;

else if(ch>=‘0‘&&ch<=‘9‘)  res=ch-‘0‘;

while((ch=getchar())>=‘0‘&&ch<=‘9‘)  res=res*10+ch-‘0‘;

res=flag?-res:res;

}

void myp(int a)

{

if(a>9)

myp(a/10);

putchar(a%10+‘0‘);

}

/********************the end of template********************/

struct node{

int st, ed, lenth;

}s;

struct strtr{//副本

int pos;

char c;

}strt[20001];

char str[20001];

bool can(char x, char y){

if(x == y || (x - y == (‘a‘ - ‘A‘)) || (y - x == (‘a‘ - ‘A‘))) return true;

return false;

}

int main(){

int j, k;

char ch;

int top = 0, len = 0;

w((ch = getchar()) != EOF){

str[len++] = ch;

if(isalpha(ch)){

strt[top].c = ch;

strt[top++].pos = len-1;

}

}

s.lenth = -1;

for(int i = 0; i < top ; i ++){

if(strt[i].c != strt[i+1].c){

for(j = i-1, k = i+1; j>=0 && k<top; j--, k++){

if(!can(strt[j].c,  strt[k].c )) break;

}

}

else{

for(j = i-1, k = i + 2; j>=0 && k<top; j--, k++){

if(!can(strt[j].c,  strt[k].c )) break;

}

}

if(s.lenth < k - j - 1){

s.st = strt[j+1].pos;

s.ed = strt[k-1].pos;

s.lenth = k - j - 1;

}

}

cout<<s.lenth<<endl;

for(int i=s.st; i<=s.ed; i++)

cout<<str[i];

cout<<endl;

return 0;

}

时间: 2024-10-08 23:32:42

USACO Section 1.3 : Calf Flac (calfflac)的相关文章

[USACO 6.2.1] Calf Flac

题目大意 给出一份文本文档,要求在这份文档中找出最长回文串(回文串忽略符号,即只包含大小写字母),并输出原文(即符号也要输出). 题解 实际上不就是一个manacher算法模板题嘛. 但是首先要忽略了符号,注意,回车换行符也算是一个符号. manacher算法实际上就是一个DP.网上有很多资料,这里不再细说. 然后在manacher的过程中加入记录字符在原文中的位置即可. 代码 /* TASK:calfflac LANG:C++ */ #include <cstdio> #include &l

USACO 1.3.3 Calf Flac(Manacher算法)

Description 据说如果你给无限只母牛和无限台巨型便携式电脑(有非常大的键盘),那么母牛们会制造出世上最棒的回文.你的工作就是去寻找这些牛制造的奇观(最棒的回文). 在寻找回文时不用理睬那些标点符号.空格(但应该保留下来以便做为答案输出),只用考虑字母'A'-'Z'和'a'-'z'.要你寻找的最长的回文的文章是一个不超过20,000个字符的字符串. 我们将保证最长的回文不会超过2,000个字符(在除去标点符号.空格之前). Input 输入文件不会超过20,000字符.这个文件可能一行或

USACO Section 2.1 Healthy Holsteins

/* ID: lucien23 PROG: holstein LANG: C++ */ #include <iostream> #include <fstream> #include <vector> using namespace std; bool compFun(int x, int y) { int temp, i = 0; while (true) { temp = 1 << i; if (temp&x > temp&y) {

USACO Section 2.2 Party Lamps

/* ID: lucien23 PROG: lamps LANG: C++ */ /* * 此题的技巧之处就是需要注意到任何button只要按下2的倍数次就相当于没有按 * 所以其实只需要考虑4个按钮,每个按钮是否被有效按下过一次就好 * 直接使用枚举法,一共只有2^4=16种情况 * 对于每种情况需要知道被按下的有效次数(也就是被按下过的按钮数),必须满足 * (C-有效次数)%2=0才行,这样其他次数才能视为无效 * 然后验证各种情况是否符合要求,将符合要求的情况按序输出即可 */ #inc

USACO Section 2.2 Runaround Numbers

/* ID: lucien23 PROG: runround LANG: C++ */ #include <iostream> #include <fstream> #include <cstring> using namespace std; int main() { ifstream infile("runround.in"); ofstream outfile("runround.out"); if(!infile || !

USACO Section 2.2 Preface Numbering

/* ID: lucien23 PROG: preface LANG: C++ */ #include <iostream> #include <fstream> #include <string> #include <map> using namespace std; int main() { ifstream infile("preface.in"); ofstream outfile("preface.out")

USACO Section 2.1 Sorting a Three-Valued Sequence

/* ID: lucien23 PROG: sort3 LANG: C++ */ #include <iostream> #include <fstream> #include <vector> #include <algorithm> using namespace std; void exchange(int nums[], int begin, int end, int N, int x); int sum = 0; int main() { ifst

USACO Section 1.1 Your Ride Is Here

原题: Your Ride Is Here It is a well-known fact that behind every good comet is a UFO. These UFOs often come to collect loyal supporters from here on Earth. Unfortunately, they only have room to pick up one group of followers on each trip. They do, how

[IOI1996] USACO Section 5.3 Network of Schools(强连通分量)

nocow上的题解很好. http://www.nocow.cn/index.php/USACO/schlnet 如何求强连通分量呢?对于此题,可以直接先用floyd,然后再判断. ---------------------------------------------------------------------------------- #include<cstdio> #include<iostream> #include<algorithm> #includ