题目
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
acdeaaSample Output
Case #1: 3
Case #2: 4
题解
不是最长上升子序列!!!
不是最长上升子序列!!!
不是最长上升子序列!!!
尽管题目一直恶意引导,比赛的时候也有人恶意引导……
字母和数字的映射是自己随便选的,只要能达到最长就行
比如 cba
答案应该是 3
要达到最长,就应该前面的尽可能小,后面的尽可能大
或者说,就是 计数总共出现了多少个不同的字符……
代码
/* By:OhYee Github:OhYee Blog:http://www.oyohyee.com/ Email:oyohyee@oyohyee.com かしこいかわいい? エリーチカ! 要写出来Хорошо的代码哦~ */ #include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <string> #include <iostream> #include <vector> #include <list> #include <queue> #include <stack> #include <map> #include <set> #include <functional> #include <bitset> #include <iomanip> using namespace std; const int maxn = 27; bool vis[maxn]; void Do() { char c = getchar();; memset(vis,false,sizeof(vis)); int ans = 0; while(!(c >= 'a'&&c <= 'z')) c=getchar(); while(c >= 'a'&&c <= 'z') { int t = c - 'a'; if(!vis[t]) { ans++; vis[t] = true; } c = getchar(); } printf("%d\n",ans); } int main() { //cin.tie(0); //cin.sync_with_stdio(false); int T; scanf("%d",&T); for(int i = 1;i <= T;i++) { printf("Case #%d: ",i); Do(); } return 0; }