Lweb and String
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 118 Accepted Submission(s): 79
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
S
,
B
is the set of natural numbers. Every injection
f:A→B
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,(1≤T≤20)
. 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
2
aabcc
acdeaa
Sample Output
Case #1: 3
Case #2: 4
Author
UESTC
Source
2016中国大学生程序设计竞赛 - 网络选拔赛 解题报告: 没有规定abc一定对应123,也可以是321,213,所以结果为不同字母的个数; code:
<span style="font-size:18px;">#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<queue>
#include<math.h>
#include<string.h>
#include<stdlib.h>
using namespace std;
typedef long long ll;
int main(){
// freopen("input.txt","r",stdin);
char s[100005];
int a[100005];
int t,k=1;
scanf("%d",&t);
getchar();
while(t--){
scanf("%s",s);
int len=strlen(s),j=0;
for(int i=0;i<len;i++)
a[j++]=s[i]-'0';
sort(a,a+len);
len=unique(a,a+len)-a;
printf("Case #%d: %d\n",k++,len);
}
return 0;
}
</span>
转载请注明原文地址: https://ju.6miu.com/read-1299309.html