2021CCPC网络赛重赛-题解

Posted iuk11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021CCPC网络赛重赛-题解相关的知识,希望对你有一定的参考价值。

(自己可能真的是个废物,理不出逻辑,错在小细节,不敢开新题,新题更没把握)
难过周末。


1004

题意:
定义一个函数 f ( x ) = k f(x)=k f(x)=k,k是第一个大于x的质数。
然后给定x的值,问 ( f ( x ) + f ( f ( x ) ) ) / 2 (f(x)+f(f(x)))/2 (f(x)+f(f(x)))/2下取整的结果是不是质数,如果是质数就输出YES,否则输出NO
因为f(x)f(f(x))均为质数,且为相邻的两个质数,除2外所有的质数均为奇数,且除了x=1时得到的值为2 3,其它情况下均可以得到两个不连续的质数,那么加和除以二的结果一定在这两个质数中间,两质数中间的数均为合数,且结果向下取整一定为整数,所有只要不是2 3一组的质数,其它相邻两个质数和除以二的结果一定为合数。

#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
int main(){
	ios::sync_with_stdio(false);
	int t;
	long long x;
	cin>>t;
	while(t--){
		cin>>x;
		if(x==1) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	}
	return 0;
}

1006

题意就是:
前缀为nunhehheh,后缀为若干个a(不包括0个),给定一个字符串,问有多少个满足条件的子序列。
分析:
先倒序维护一个在当前位置a有多少个的数组。
再动态维护出一个 d p [ i ] [ j ] dp[i][j] dp[i][j],表示在第i位以第j个操作数 结尾的子序列个数。
o p p = " @ n u n h e h h e h " opp="@nunhehheh" opp="@nunhehheh",第一位空出,防止 i = 0 i=0 i=0时数组越界。
每次在第i位上记录(该位满足的a的组合数,乘以,该位有多少个满足前缀要求的子序列)
设n为当前位后面的a的数量: C n 1 + C n 2 + . . . + C n n = 2 n − 1 C_{n}^{1}+C_{n}^{2}+...+C_{n}^{n}=2^n-1 Cn1+Cn2+...+Cnn=2n1

#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;
const int mod=998244353;
const int N=1e5+100;
typedef long long ll;
ll nua[N];
ll dp[12];
string opp="@nunhehheh";
ll qpow(int a,int b){
	ll res=1;
	while(b){
		if(b&1) res=res*a%mod;
		a=1LL*a*a%mod;
		b>>=1;
	}
	return res;
}
int main(){
	ios::sync_with_stdio(false);
	int t;
	cin>>t;
	while(t--){
		memset(nua,0,sizeof(nua));
		memset(dp,0,sizeof(dp));
		string str;
		cin>>str;
		int n=str.size();
		str="@"+str;
		for(int i=n;i>=1;i--){
			nua[i]=nua[i+1]+(str[i]=='a');
		}
		ll ans=0,temp=0;
		for(int i=1;i<=n;i++){
			for(int j=9;j>=2;j--){
				dp[j]=(dp[j]+(str[i]==opp[j])*dp[j-1])%mod;
			}
			dp[1]=(dp[1]+(str[i]==opp[1]))%mod;;
			ans=(ans+(dp[9]-temp+mod)%mod*(qpow(2,nua[i])-1+mod)%mod)%mod;
			temp=dp[9]%mod;
		}
		cout<<ans<<endl;
	}
	return 0;	
} 

以上是关于2021CCPC网络赛重赛-题解的主要内容,如果未能解决你的问题,请参考以下文章

Jumping Monkey(CCPC网络赛重赛)

CCPC网络赛2021中国大学生程序设计竞赛(CCPC)- 网络选拔赛(重赛) 签到题5题

2021中国大学生程序设计竞赛(CCPC)- 网络选拔赛(重赛) Jumping Monkey(并查集,逆向考虑)

2021中国大学生程序设计竞赛(CCPC)- 网络选拔赛(重赛) Jumping Monkey(并查集,逆向考虑)

2021CCPC网络赛部分题解

2021CCPC网络选拔赛题解