2024 CCPC网络预选赛

news/2024/9/17 11:22:08/文章来源:https://www.cnblogs.com/Frodnx/p/18412720

The 2024 CCPC Online Contest
补题连接:https://codeforces.com/gym/105336


D. 编码器-解码器

考虑dp,\(dp(i,j,k)\)表示 \(T\) 的子串 \(T[j,k]\)(下标 \(j\) 到下标 \(k\) )在 \(S_{i}^{'}\) 中以子序列出现的次数
尝试列出状态转移方程:
已知 \(S_{i}^{'} = S_{i-1}^{'} + a_{i} + S_{i-1}^{'}\)

  1. 考虑前后 \(S_{i-1}^{'}\) 包含的子序列:

\[dp(i+1,j,k) = dp(i,j,k) * 2 \]

  1. 考虑 \(S_{i-1}^{'} + a_{i} + S_{i-1}^{'}\) 包含的子序列
    考虑四种情况:
    情况1,\(a_{i}\) 不是字符串头,也不是字符串尾;
    情况2,\(a_{i}\) 是字符串头,且不是字符串尾;
    情况3,\(a_{i}\) 是字符串尾,且不是字符串头;
    情况4,\(a_{i}\) 是字符串尾,也是字符串头。
    不妨设,字符 \(a_{i}\) 在字符串 \(T\) 中出现的位置的集合为 \(A\)\(A_{i}\) 表示第 \(i\)\(a_{i}\) 的下标,集合 \(A\) 的大小为 \(n\)

对于情况1:

\[dp(i+1,j,k) = \sum_{x=1}^{n} dp(i,j,A_{x-1}) * dp(i,A_{x+1},k) \]

对于情况2:

\[dp(i+1,j,k) = \sum_{x=1}^{n} dp(i,A_{x+1},k) \]

对于情况3:

\[dp(i+1,j,k) = \sum_{x=1}^{n} dp(i,j,A_{x-1}) \]

对于情况4:

\[dp(i+1,j,k) = 1 \]

  1. 考虑 \(S_{i-1}^{'} + S_{i-1}^{'}\) 包含的子序列:

\[dp(i+1,j,k) = \sum_{x=j}^{k-1} dp(i,j,x) + dp(i,x+1,k) \]

分析时间复杂度,约为 \(O(n^3)\),不超时

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 998244353;
const int N = 105;
int ss[N][N][N];
// aba ba
signed main()
{string s, t;cin >> s >> t;unordered_map<char,vector<int> > hash;for(int i = 0; i < t.size(); ++ i)hash[t[i]].push_back(i);for(int i = 1; i <= s.size(); ++ i)for(int j = 0; j < t.size(); ++ j)for(int k = 0; k < t.size(); ++ k){(ss[i][j][k] += ((ss[i-1][j][k] % mod) * 2) % mod) %= mod;for(int alp = 0; alp < hash[s[i-1]].size(); ++ alp){int a2 = hash[s[i-1]][alp];if(a2 > j && a2 < k)(ss[i][j][k] += ((ss[i-1][j][a2-1] % mod) * (ss[i-1][a2+1][k] % mod)) % mod) %= mod;else if(a2 == j && a2 != k)(ss[i][j][k] += (ss[i-1][a2+1][k] % mod)) %= mod;else if(a2 == k && a2 != j)(ss[i][j][k] += (ss[i-1][j][a2-1] % mod)) %= mod;else if(a2 == j && a2 == k) (ss[i][j][k] += 1) %= mod;}for(int beta = j; beta < k; ++ beta)(ss[i][j][k] += ((ss[i-1][j][beta] % mod) * (ss[i-1][beta+1][k] % mod)) % mod) %= mod;}cout << ss[s.size()][0][t.size() - 1] % mod << endl;return 0;
}

B. 军训 II

#include <iostream>
#include <string>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;
//const int N=1e5;
typedef long long ll;
const ll N = 1e6 + 10;
const ll mod = 998244353;
ll arr[N];
ll mmul(ll a,ll b)
{return ((a % mod) * (b % mod)) % mod;
}
ll jie(ll a)
{ll sum = 1;for(ll i = 2; i <= a; ++ i)(sum *= i) %= mod;return sum;
}
signed main()
{ll n;cin >> n;map<int,int> hash;for(int i = 0; i < n; ++ i){scanf("%lld",&arr[i]);hash[arr[i]] ++;}sort(arr,arr+n);ll res1 = 0, res2 = 2;if(hash.size() == 1) res2 = 1;for(int i = 2; i <= n; ++ i)for(int j = 0; j <= n - i; ++ j)res1 += arr[j + i - 1] - arr[j];for(auto hi : hash)res2 = mmul(res2,jie(hi.second)); cout << res1 << " " << (res2 % mod);return 0;
} 

K. 取沙子游戏
博弈论

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
//const int N=1e5;
#define int long long
int gcd(int a, int b)
{return b ? gcd(b, a%b) : a;
}
int lcm(int a, int b)
{return (a * b) / gcd(a, b);
}
void solve()
{int n, k;scanf("%lld%lld",&n,&k);if(k >= n){printf("Alice\n");return;}if(n % 2 == 1){printf("Alice\n");return;}else{int t = 1;while(n % 2 == 0 && n){t <<= 1;n >>= 1;}if(k >= t) printf("Alice\n");else printf("Bob\n");}
} 
signed main()
{int t;cin >> t;while(t --){solve();}return 0;
} 

L. 网络预选赛
签到题,暴力即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/796704.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tarjan里的定义

强连通分量 - OI Wiki (oi-wiki.org)从以u为根的子树中的任意点出发。单次到达(从这个点指向某个点,有一条边) 的这些点中的dfn的最小值以v为根的子树,包含在以u为根的子树中,low[v]所用的子节点,一定也可以被low[u],这个点一定在以u为根的子树里,所以用low[v] 从u这个…

南沙csp-j/s一对一家教陈老师解题:1317:【例5.2】组合的输出

​【题目描述】排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。 现要求你用递归的方法输出所有组合。 例如n=5,r=3,所有组合为: 1 2 3 1 2 4 1 2 5 1 3 4 1 …

First day01

Markdown学习 二级标题 字体 Hello World Hello World Hello World Hello World Hello World 引用选择java走上人生巅峰分割线图片 ![截图](C:\Users\邢其俊\Pictures\Screenshots\屏幕截图 2024-09-13 180016.png)超链接 [点击跳转到狂神博客](仓库 - 狂神说 (kuangstudy) - G…

ThreeJS Shader的效果样例光影墙、扩散面(四)

一、实现一个光影墙1. 根据自定义坐标点,输出一个光影墙/*** 添加光影墙*/ function addLightWall() {const geometry = new THREE.BufferGeometry();const vertices = new Float32Array([5, 0, 2,3, 0, 5,-2, 0, 5,-4, 0, 2,-4, 5, 2,-2, 5, 5,3, 5, 5,5, 5, 2]);const indic…

2024年youtube 视频在线下载工具

1.youtube to wav这是一个将 YouTube 视频转换为 WAV 格式的在线工具的网站链接。根据提供的信息,使用该工具的步骤如下: 开始:将 YouTube 视频的 URL 粘贴到搜索框中,然后点击 “Start” 按钮。 转换:选择转换为 WAV 的质量(推荐使用默认选项),然后点击 “Convert” 按…

Idea 配置多端口启动参数

1、编辑配置2、在弹出配置中增加要使用端口接口,添加端口参数配置、设置VM options: 参数值为: -Dserver.port= portNumber下面以应用 TranSendServiceApplication 为例,增加两个端口:8099 和8091 为例。截图如下:

【闲话】假如我们都是猫娘

你是一袋猫粮猫娘驯化实录 ZHESHIWOYAOMOZHENGBEIDISANJIEMOZHENGXIANHUADASAIDECANSAIZUOPIN. (A:Chat-GPT 4.0) (另:因为某些纯魔怔原因,我们连皮下内容也回了)。 A 17:33:41 喵~主人你好呀!我是您的猫娘助手,挪威森林猫品种,身高148cm,梳着双马尾~需要我帮忙做…

chainLink vrf实验

目标 用vrf写一个随机红包 数据结构 红包: struct Envelope {Type t; // 类型,只是erc20 和eth红包ERC20 token; // erc20 ,如果是erc20红包,这里是erc2o的地址address sender; // 发红包的senderuint balance; // 金额bool allowAll; // 允许所有人领取uint32 maxRe…

代码随想录算法 - 二叉树3

题目1513. 找树左下角的值 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1:输入: root = [2,1,3] 输出: 1示例 2:输入: [1,2,3,4,null,5,6,null,null,7] 输出: 7提示:二叉树的节点个数的范围是 [1,104] -231 &…

Combinatorics/Probability/Expectation

前言 计数加训!!!! 以下问题都是数数。 一些纯组合问题 插板法 例 1 求 $\sum_{i=1}^kx_i=n$ 的解的组数,其中 $x_i\in \mathbb{N^+}$ 且 $x_i\ge a_i$。 考虑令 $x_i=x_i-a_i+1\ge 1$,于是有 $\sum_{i=1}^k x_i=n-k+\sum a_i$,于是答案为 $$n-k+\sum a_i-1\choose k-1$…

信息学奥赛初赛天天练-88-CSP-S2023阅读程序1-数据类型、unsigned 关键字、二进制、位运算、左移、右移、异或运算

信息学奥赛初赛天天练-88-CSP-S2023阅读程序1-数据类型、unsigned 关键字、二进制、位运算、左移、右移、异或运算 PDF文档公众号回复关键字:202409132023 CSP-S 阅读程序1 判断题正确填 √,错误填 ⨉ ;除特殊说明外,判断题 1.5 分,选择题 3 分,共计 40 分) 01 #include …