列表

详情


NC221231. 小圆前辈的排列组合

描述

小焰同学是小圆前辈的好朋友,她已经在CCSU生活三年了,别看她现在是在ACM实验室,其实在之前她一直忙于各种社团与班级团建活动之中,还在兼顾学习成绩与竞赛强度的她有一些力不从心,尤其是大一的时候因为社团的节目排练还占用了她大部分时间,甚至影响了正常作息,让她在接下来的大学生活一直处于阴影之中。作为她的室友因为长期收到这样的负面情绪而苦不堪言。所以为了让她训练饱和,想要帮她在之后的日子中去除那些琐碎的杂事,只挑有意义的事情让她做,现在我们把所有的事件比作一个长度为 n 的的字符串,每一件事情是一个字符。她在第合数个事件中想要划水看番打游戏,所以你只能从素数事件中挑选事件来让她做,其中如果在所有挑选的事件中可以重新排列组合成为“ CCSU ” 的话,证明她做的事情是有意义的,那么请问在这一系列的事情中她是否可以做有意义的事呢,可以的话输出 "Yes",否则输出 “No”。(字符串从一开始)

输入描述

仅包含一行字符串 s
每个字符可能为数字或者大小写字母

输出描述

如果小焰同学可以做有意义的事情
输出 "Yes"
否则输出 "No"
(不带引号)

示例1

输入:

CCSU

输出:

No

示例2

输入:

CCCSSUU

输出:

Yes

原站题解

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

C(clang11) 解法, 执行用时: 286ms, 内存消耗: 1296K, 提交时间: 2021-04-24 17:19:31

#include <stdio.h>
#include <string.h>
#include <math.h>
int main(){
	char a[1000000]={};
	scanf("%s",&a);
int i,x,q=strlen(a);
int l=0,m=0,n=0;
for(i=2;i<=q;i++)	
{
	int j=(int)sqrt(i);
	for(x=2;x<=j;x++)
	{
		if(i%x==0){
		break;}
	}
	
	
	if(x>j){

		if(a[i-1]=='C')
		{
			l++;
		}
		if(a[i-1]=='S')
		{
			m++;
		}
		if(a[i-1]=='U')
		{
			n++;
		}

	}

}
	if(l>=2 && m>=1 && n>=1)
	{
		printf("Yes");
	}
	else
	{
		printf("No");
	}
	return 0;
}

Python3 解法, 执行用时: 650ms, 内存消耗: 6720K, 提交时间: 2022-03-24 15:18:33

def su_shu(x):
    if x <= 1:
        return False
    if x % 2 == 0 and x != 2:
        return False
    i = 3
    while i * i <= x:
        if x % i == 0:
            return False
        i += 2
    return True



s = input()
a = list()
for i in range(len(s)):
    if s[i] in 'CSU':
        if su_shu(i + 1):
            a.append(s[i])
if 'C' in a:
    a.remove('C')
if 'C' in a and 'S' in a and 'U' in a:
    print('Yes')
else:
    print('No')

C++ 解法, 执行用时: 235ms, 内存消耗: 2528K, 提交时间: 2021-05-26 13:58:52

#include<bits/stdc++.h>
using namespace std;
int s[129];
bool susu(int n){
    for(int i=2;i*i<=n;i++)
        if(n%i == 0)
            return false;
    return true;
}
int main(){
	string t;
	cin>>t;
	int z=t.length();
	for(int i=0;i<z;i++)
		if(susu(i+1))
		   s[t[i]]++;
	if(s['C']>1&&s['S']&&s['U'])printf("Yes");
	else printf("No");
}

上一题