编程之美2015 资格赛 hihocoder 题目2: 回文字符序列

思路:暴力搜,用BFS的方式,生成每一种可能,再对每一种可能进行判断是否回文,进行统计。严重超时!计算一个25个字符的,大概要20多秒!

 1 #include <iostream>
 2 #include <deque>
 3 #include <string>
 4 #include <stdio.h>
 5 #include <cstring>
 6 using namespace std;
 7
 8 deque<string> a;
 9
10 bool isP(string &s )
11 {
12     string::iterator it1=s.begin();
13     string::iterator it2=s.end();
14     while( it1!=it2 && it1!=--it2 )
15     {
16         if( *it1!=*it2 )
17             return false;
18         it1++;
19     }
20     return true;
21 }
22
23 unsigned long long count()   //判断回文,注意取余
24 {
25     unsigned long long cnt=0;
26     string tmp="";
27     a.pop_front();
28     while( !a.empty() )
29     {
30         tmp =a.front();
31
32         if( tmp.size()==1 )
33             cnt++;  //单个的情况
34         else if( isP(tmp)==true )
35             cnt++;
36
37         a.pop_front();
38         if(cnt>100007 )
39             cnt %= 100007;
40     }
41     return cnt;
42 }
43
44 int betree(string &s, int len)  //生成树
45 {
46     string tmp="";
47     a.push_back(tmp);
48
49     int i, j, limit =a.size() ;
50
51     for(i=0; i<len; i++)
52     {
53         for(j=0; j<limit; j++)
54         {
55             a.push_back(a.front());   //不装第i个
56             a.push_back(a.front()+s[i]);   //装第i个
57             a.pop_front();
58         }
59         limit =a.size();
60     }
61     return 0;
62 }
63
64 int main()
65 {
66     //freopen("input.txt","r",stdin);
67     int t, j=0;
68     string s;
69     cin>>t;
70     while(t--)
71     {
72         a.clear();
73         s="";
74         cin>>s;
75         betree(s, s.size());
76         cout<<"Case #"<< ++j<< ": "<< count()<<endl;
77     }
78     return 0;
79 }

BFS超时

另外的思路:有一个感觉,肯定可以用DP,但是状态方程写不出来。

时间: 2024-12-26 09:25:03

编程之美2015 资格赛 hihocoder 题目2: 回文字符序列的相关文章

编程之美2015 资格赛 hihocoder 题目3 : 基站选址

题意:给一个网格大小,在其中找一个基站,使得到每个用户之间的距离的平方(欧几里得距离的平方),和到其中任一个通讯的距离(曼哈顿距离)的总距离(代价)最小.其实就是到每个用户的距离最小的基础上,到通讯公司也要尽可能近,距离也就是代价. 思路:一开始觉得需要每个点都尝试,计算代价,再比较代价,找出基站最佳位置.但是,这样还叫算法?不是比穷举更快的算法都不叫算法!那么得想办法减少搜索的点,想到基站不可能建立在一个其某一个方向上完全没有用户或者通讯公司的地方,比如用户和通讯公司都在x坐标10以上,而我们

编程之美2015资格赛

题目1 : 2月29日 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 1. 年份能被4整除但不能被100整除 2. 年份能被400整除 输入 第一行为一个整数T,表示数据组数. 之 后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{"January", "Fe

微软2编程之美2015资格赛

题目1 :2月19日 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 1. 年份能被4整除但不能被100整除 2. 年份能被400整除 输入 第一行为一个整数T,表示数据组数. 之后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{"January", "Febr

编程之美2015资格赛:回文字符序列

题目2 : 回文字符序列 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a", "a", "aa", "b", "aba",共5个.内容相同位置不同的子序列算不同的子序列. 输入 第一行一个整数T,表示数据组数.之后是T组数据,每组数据为一行字符串. 输出 对于每组数据

hiho 编程之美2015资格赛(回文字符序列-回文子序列数)

题目2 : 回文字符序列 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a", "a", "aa", "b", "aba",共5个.内容相同位置不同的子序列算不同的子序列. 输入 第一行一个整数T,表示数据组数.之后是T组数据,每组数据为一行字符串. 输出 对于每组数据

编程之美——题目2 : 回文字符序列

题目2 : 回文字符序列 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a", "a", "aa", "b", "aba",共5个.内容相同位置不同的子序列算不同的子序列. 输入 第一行一个整数T,表示数据组数.之后是T组数据,每组数据为一行字符串. 输出 对于每组数据

编程之美2015资格赛 题目1 : 2月29日

时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 1. 年份能被4整除但不能被100整除 2. 年份能被400整除 输入 第一行为一个整数T,表示数据组数. 之后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{"January", "February",

hiho 编程之美2015资格赛(基站选址-绝对值方程分段)[无数据]

题目3 : 基站选址 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 需要在一个N × M的网格中建立一个通讯基站,通讯基站仅必须建立在格点上. 网格中有A个用户,每个用户的通讯代价是用户到基站欧几里得距离的平方. 网格中还有B个通讯公司,维护基站的代价是基站到最近的一个通讯公司的路程(路程定义为曼哈顿距离). 在网格中建立基站的总代价是用户通讯代价的总和加上维护基站的代价,最小总代价. 输入 第一行为一个整数T,表示数据组数. 每组数据第一行为四个整数:N, M,

编程之美2015资格赛:基站选址

题目3 : 基站选址 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 需要在一个N × M的网格中建立一个通讯基站,通讯基站仅必须建立在格点上. 网格中有A个用户,每个用户的通讯代价是用户到基站欧几里得距离的平方. 网格中还有B个通讯公司,维护基站的代价是基站到最近的一个通讯公司的路程(路程定义为曼哈顿距离). 在网格中建立基站的总代价是用户通讯代价的总和加上维护基站的代价,最小总代价. 输入 第一行为一个整数T,表示数据组数. 每组数据第一行为四个整数:N, M,