HDU 5842:Lweb and String (统计)

    xiaoxiao2025-07-24  7

    Lweb and String

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 261    Accepted Submission(s): 174 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: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 2 aabcc acdeaa   Sample Output Case #1: 3 Case #2: 4   这道题的题目很长,并且很容易让人误以为是一个求最大上升子序列长度的问题,其实只是一个计算不同字符个数的问题,别小看这种问题哦!很轻松就会超时的。 AC代码: #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; char c[100005]; int a[30]; int main() { int n; scanf("%d%*c",&n); for(int i=1; i<=n; i++) { gets(c); int s=0; memset(a,0,sizeof(a)); for(int j=0; j<(int)strlen(c); j++) { if(!a[c[j]-'a']) { a[c[j]-'a']=true; s++; } } printf("Case #%d: %d\n",i,s); } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-1301023.html
    最新回复(0)