标签:queue carchive eps c代码 online blank using 空间 分享
题目:UVALive - 6439 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4450
题意: 输入一个整数 t , 代表程序测试的次数 , 然后要将一些非回文串进行替换形成回文串, 求形成的回文串的最大长度。
例如 abdab -> 非回文串 但是将ab替换成另一个字符* 那么形成 *d* 最长是3,所以最终结果输出3。
做这题之前,先来了解C++中的 string 的用法 。
1.
string 是包含在 头文件<string> 中 记住并非是 cstring 或者是 string.h ,而是另起一个头文件 string
并且需要加上 using namespace std; 的命名空间
2.
string 是c++语言中已经定义的类 ,属于一种类,
所以存在着构造函数和析构函数,
假设
string str; //先声明
string(int n,int c) ; ------>>>> 作用是 对str进行构造函数赋值 复制是n个c是字符串
例如 str.string (3 ,‘#‘); 那么输出 str 是 ### //三个
还存在 string (const char *p) -----> 拷贝构造赋值
例如: str.string("*****"); 那么输出 str s *****
3.
此处是解题关键,
string l="",r=""; //空内容
l=l+‘a‘; // l的内容是a
l=l+‘b‘ // l的内容是ab
l=l+‘d‘ // l的内容是abd
以此类推
string s="abc";
s=‘g‘+s; // s的内容是gabc
s=‘y‘+s; // s的内容是ygabc
以此类推 (主要说明 这里加法是 字符串的连接,接前接后看加法的前后)
ac代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define Swap(a,b,t) t=a,a=b,b=t
#define Mem0(x) memset(x,0,sizeof(x))
#define Mem1(x) memset(x,-1,sizeof(x))
#define MemX(x) memset(x,0x3f,sizeof(x));
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f;
const double eps=1e-12;
char str[50010];
int main()
{
int t,cnt=0;
cin>>t;
while (t--){
cin>>str;
int ans=0;
string l="",r="";
int len=strlen(str);
int mid=len/2;
for (int i=len-1;i>=mid;i--){
l=l+str[len-1-i];
r=str[i]+r;
if (l==r&&len-1-i!=i){
ans+=2;
l.clear();
r.clear();
}
if (i==len/2&&!l.empty())
ans++;
}
printf("Case #%d: %d\n",++cnt,ans);
}
return 0;
}
标签:queue carchive eps c代码 online blank using 空间 分享
原文地址:https://www.cnblogs.com/q1204675546/p/9381868.html