列表

详情


NC215080. CCSU

描述

给你一个字符串s,要求你找到s中有多少个子序列为"CCSU",(子序列:一个字符串 s 被称作另一个字符串 S 的子序列,说明从序列 S 通过去除某些元素但不破坏余下元素的相对位置(在前或在后)可得到序列 s )。例如:

"abc"的子序列有 ,"a", "b", "c", "ab", "ac", "bc", "abc"。

输入描述

第1行输入一个字符串s。

输出描述

输出子序列为"CCSU"的个数 答案模上

示例1

输入:

CCSCSUU

输出:

8

说明:


索引值:{0,1,2,5},{0,1,2,6},{0,1,4,5},{0,1,4,6},{1,3,4,5},{1,3,4,6}, {0, 3, 4, 5}, {0, 3, 4 6}

这些索引值对应的子序列都为"CCSU"。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Java(javac 1.8) 解法, 执行用时: 121ms, 内存消耗: 17272K, 提交时间: 2020-12-25 20:39:19

import java.util.Scanner;
public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		String zifu = in.next();
		long a[] = new long[4];
		for(int i =0;i<zifu.length();i++)
		{
			if(zifu.charAt(i) == 'C')
			{
				a[1] += a[0];
				a[0]++;
			}
			else if (zifu.charAt(i) == 'S') {
				a[2] += a[1];
			}
			else if (zifu.charAt(i) == 'U') {
				a[3] +=a[2];
			}
		}
		a[0] %= 1000000007;
		a[1] %= 1000000007;
		a[2] %= 1000000007;
		a[3] %= 1000000007;
		System.out.println(a[3]);
		in.close();
	}
}

C++(clang++11) 解法, 执行用时: 7ms, 内存消耗: 516K, 提交时间: 2020-12-20 16:56:00

#include <bits/stdc++.h>
using namespace std;

int main()
{string s;long long c,u,num; cin >> s; c = u = num = 0; for( int i = 0 ; i<s.length() ; i++ ) { if( s[i]=='U' ) u++; }
 for( int i = 0 ; i<s.length() ; i++ ) {if( s[i]=='C' ) c++; else if( s[i]=='U' ) u--; else if( s[i]=='S' )
 { num+=c*(c-1)/2*u; }
 } cout << num%1000000007 ;
}

上一题