HDU5842-Lweb and String

来源:互联网 发布:java package怎么用 编辑:程序博客网 时间:2024/05/20 00:51

Lweb and String

                                                                           Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
                                                                                                        Total Submission(s): 948    Accepted Submission(s): 516


Problem Description
Lweb has a string S.

Oneday, he decided to transform this string to a new sequence. 

You need help him determine this transformation to get a sequence which has the longest LIS(Strictly Increasing). 

You need transform every letter in this string to a new number.

A is the set of letters of SB is the set of natural numbers. 

Every injection f:AB can be treat as an legal transformation. 

For example, a String “aabc”, A={a,b,c}, and you can transform it to “1 1 2 3”, and the LIS of the new sequence is 3. 

Now help Lweb, find the longest LIS which you can obtain from S.

LIS: Longest Increasing Subsequence. (https://en.wikipedia.org/wiki/Longest_increasing_subsequence)
 

Input
The first line of the input contains the only integer T,(1T20).

Then T lines follow, the i-th line contains a string S only containing the lowercase letters, the length of S will not exceed 105.
 

Output
For each test case, output a single line "Case #x: y", where x is the case number, starting from 1. And y is the answer.
 

Sample Input
2aabccacdeaa
 

Sample Output
Case #1: 3Case #2: 4
 

Author
UESTC
 

Source
2016中国大学生程序设计竞赛 - 网络选拔赛
 

Recommend
wange2014
 


题意:给你一个字符串,其中的相同的字符可以用一个数字代替,问转化后最长上升子序列为多少

解题思路:水题,判断出现了几种不同的单词即为答案


#include <iostream>  #include <cstdio>  #include <cstring>  #include <string>  #include <algorithm>  #include <cmath>  #include <map>  #include <cmath>  #include <set>  #include <stack>  #include <queue>  #include <vector>  #include <bitset>  #include <functional>  using namespace std;#define LL long long  const int INF = 0x3f3f3f3f;int flag[30];char s[1000005];int main(){int t;int q = 1;scanf("%d", &t);while (t--){scanf("%s", &s);int k = strlen(s);memset(flag, 0, sizeof flag);int cnt = 0;for (int i = 0; i < k; i++){if (flag[s[i] - 'a' ]== 0){cnt++;}flag[s[i] - 'a'] = 1;}printf("Case #%d: %d\n", q++, cnt);}return 0;}

0 0
原创粉丝点击