给您一个字符串s。您需要找到两个非空字符串a和b,以满足以下条件:
字符串a和b都是s的子序列。
对于每个索引 i,字符串s的字符si必须恰好属于字符串a或b中的一个。
字符串a是词典编纂的最小可能值,字符串b可以是任何可能的字符串。
求满足条件的任意一种字符串a和b。
思路:我们知道字符串a和b都是非空的,而且字符串a是词典编纂的最小可能值,字符串b可以是任何可能的字符串,并且我们只要求出任意一种解就可以了,这样最简单的方法就是我们让字符串a等于字符串s里字典序最小的元素,让字符串b等于字符串s剩下的元素组成的子串即可。
AC代码: c++:#includeusing namespace std; int main() { int t; cin>>t; while(t--) { char s[105],s1[105]; char c; int len,flag=1; cin>>s; len=strlen(s); strcpy(s1,s); sort(s1,s1+len); c=s1[0]; cout< python: t = int(input()) for i in range(t): s = input() c = s[0] flag = True for j in s: if c > j: c = j print(c,end=' ') for j in s: if j == c and flag: flag = False continue print(j,end='') print()B - Divine Array 题意:我们有一个长度为n的序列,对于这个序列我们有这样一个操作:
对于每个位置j,我们让a[j]等于在序列中a[j]出现的次数。
比如说原序列为:2,1,1,4,3,1,2
进行一次操作后:2,3,3,1,1,3,2
进行两次操作后:2,3,3,2,2,3,2
进行三次操作后:4,3,3,4,4,3,4
我们有q次查询,每次查询会给出两个数x和k,我们要求出第k次操作后a[x]的值,当k=0时表示查询到时原始序列。
思路:题目中序列的长度n最大为2000,那么我们用O(n*n)的时间复杂度直接暴力模拟一下所有的操作变化是不会超时的,之后在询问时直接输出答案就可以了。
AC代码: c++:#includepython:using namespace std; int a[2005][2005],b[2005]; int main() { int t; cin>>t; while(t--) { int n,m,q,k; cin>>n; for(int i=0;i >a[0][i]; } for(int i=0;i >q; while(q--) { cin>>m>>k; if(k>n) { k=n; } cout< 暂时还不会python二维列表的应用,之后再写。



