牛客周赛 Round 59(思维、构造、数论)

文章目录

  • 牛客周赛 Round 59(思维、构造、数论)
    • A. TD
    • B. 你好,这里是牛客竞赛
    • C. 逆序数(思维)
    • D. 构造mex(构造)
    • E. 小红的X型矩阵
    • F. 小红的数组回文值(数论、范德蒙恒等式)

牛客周赛 Round 59(思维、构造、数论)


E题,对于对角线的处理,常用。

F题,范德蒙恒等式推论的应用。


A. TD

简单数学题。

#include<bits/stdc++.h>using namespace std;int main(){double n, m;cin >> n >> m;double res = n / m;printf("%.10lf", res); // 注意精度return 0;
}

B. 你好,这里是牛客竞赛

判断四个模式串是否为输入字符串的前缀即可。

#include<bits/stdc++.h>using namespace std;bool is_prefix(const string& A, const string& B){	// 判断B是否为A的前缀return A.find(B) == 0;		// str.find() 返回首次匹配的下标,没找到返回str.npos
}int main(){map<string, string> mp;mp["https://www.nowcoder.com"] = "Nowcoder";mp["www.nowcoder.com"] = "Nowcoder";mp["https://ac.nowcoder.com"] = "Ac";mp["ac.nowcoder.com"] = "Ac";int ncase;cin >> ncase;while(ncase--){string s;cin >> s;int is_find = 0;for(auto x : mp){if(is_prefix(s, x.first)){is_find = 1;cout << x.second << endl;break; }}if(!is_find) cout << "No" << endl;}return 0;
}

C. 逆序数(思维)

通过简单思考,一个序列A,任选两个元素,共有 |A| * (|A|-1)/ 2 种选择。(|A| 表示A序列中元素的个数)

对于任选的Ai 和 Aj,要么其在 A 中为逆序对,要么在 A’ 中为逆序对。(设A序列的逆序序列为A’)

综上,A 和 A’ 中逆序对的和为 |A| * (|A|-1)/ 2。

在已知A的逆序对个数和元素个数时,可以计算出A’ 中逆序对的个数。

#include<bits/stdc++.h>
#define ll long long
using namespace std;int main(){ll n, k;cin >> n >> k;ll res = n * (n-1) / 2 - k; // 注意数据范围cout << res << endl;return 0;
}

D. 构造mex(构造)

一点点细节的构造题。

根据 k 与 n 的大小关系进行了分类,具体看代码吧。

#include<bits/stdc++.h>
#define ll long long
using namespace std;void print_yes(int k, int is_end){cout << "YES" << endl;for(int i = 0; i < k; i++){cout << (i == 0 ? "" : " ") << i;}if(is_end) cout << "\n";
}int main(){int ncase;cin >> ncase;while(ncase--){ll s, n, k;cin >> s >> n >> k;if(k == 0){if(s >= n){cout << "YES" << endl; int sum = s - n;for(int i = 1; i < n; i++) cout << "1 ";cout << sum + 1 << endl;}else cout << "NO" << endl;}else if(k == 1 && s == 1) cout << "NO" << endl;else if(k > n) cout << "NO" << endl;else if(k == n){ll sum = k * (k-1) / 2;if(sum == s) print_yes(k, 1);else cout << "NO" << endl;}else if(k+1 == n){ll sum = k * (k-1) / 2;if(sum + k != s && s >= sum){print_yes(k, 0);cout << " " << s - sum << endl;}else cout << "NO" << endl;}else {	// 这是一种普遍的构造方法,上边的分类,均为当前分支不适配的特殊情况。ll sum = k * (k-1) / 2;if(sum > s) cout << "NO" << endl;else if(sum + k != s){print_yes(k, 0);cout << " " << s - sum;for(int i = k+2; i <= n; i++) cout << " " << 0;cout << endl;}else{print_yes(k, 0);cout << " " << s - sum - 1 << " 1";for(int i = k+3; i <= n; i++) cout << " " << 0;cout << endl;}}}return 0;
}

E. 小红的X型矩阵

操作二等价于:可以在保证元素相对位置的基础上,把任意点放在矩阵中间。

X形矩阵的形状与 n 的奇偶有关。

  • 主对角线:左上到右下;副对角线:右上到左下。

  • 任意点(x, y) 所在的主对角线上的点都满足:(x-y+n) % n

  • 任意点(x, y) 所在的福对角线上的点都满足:(x+y) % n

当 n为奇数时,任意点(x,y)需要的操作一的数量为:对角线上 0 的个数 + (全部 1 的个数为 X - 对角线上 1 的个数)

当 n为偶数时,任意点(x,y)需要的操作一的数量为:对角线上 0 的个数 + (全部 1 的个数为 X - 对角线上 1 的个数)

#include<bits/stdc++.h>using namespace std;const int maxn = 1005;
int a[maxn][maxn];
int z[maxn], f[maxn];int main(){int n;cin >> n;int sum_1 = 0;for(int i = 0; i < n; i++){for(int j = 0; j < n; j++){cin >> a[i][j];z[(i-j+n)%n] += a[i][j];	 // 主对角线 1的个数 f[(i+j)%n] += a[i][j];  	 // 副对角线 1的个数 sum_1 += a[i][j];}}int res = n * n;for(int i = 0; i < n; i++){for(int j = 0; j < n; j++){int pos_z = (i-j+n) % n, pos_f = (i+j) % n, tmp, d_0, d_1;if(n % 2 == 0){pos_f = (pos_f + 1) % n; 			// 偶数时,副对角线下移一格 d_1 = z[pos_z] + f[pos_f];			// 对角线上 1 的个数 d_0 = 2*n - d_1;	// 对角线上 0 的个数 }else{// 如果是奇数,(i,j) 会被重复统计d_1 = z[pos_z] + f[pos_f] - a[i][j];d_0 = 2*n-1 - d_1;}tmp = d_0 + (sum_1 - d_1);res = min(res, tmp); 
//			cout << i << " " << j << " " << res << " " << tmp << endl;}}cout << res << endl;return 0;
}/*0 1 2 3 4
0	0 4 3 2 1 
1	1 0 4 3 2
2	2 1 0 4 3
3	3 2 1 0 4
4	4 3 2 1 0*/

F. 小红的数组回文值(数论、范德蒙恒等式)

思路不是很复杂,任选两个元素 ai 与 aj ,考虑这两个元素对答案的贡献。

  • 当 ai == aj 时,不需要操作,贡献为零。

  • 当 ai != aj 时,需要操作,贡献为 ai 与 aj 在对称位置的子序列的个数

在这里插入图片描述

如上图,要保证 ai 与 aj 在对称位置,集合A和集合C贡献的元素个数必须相等。集合B对对称性没有影响 ,可自行枚举。

  • 集合B对子序列个数的贡献为 2|B|,其中 |B| 表示集合B中元素的个数。

  • 集合A和集合C对子序列个数的贡献为 ∑ i = 0 m i n ( ∣ A ∣ , ∣ C ∣ ) C ( i , ∣ A ∣ ) ∗ C ( i , ∣ C ∣ ) \sum_{i=0}^{min(|A|, |C|)} {C(i,|A|) * C(i, |C|)} i=0min(A,C)C(i,A)C(i,C)

综上,ai 与 aj 在对称位置的子序列的个数 = 2|B| * ∑ i = 0 m i n ( ∣ A ∣ , ∣ C ∣ ) C ( i , ∣ A ∣ ) ∗ C ( i , ∣ C ∣ ) \sum_{i=0}^{min(|A|, |C|)} {C(i,|A|) * C(i, |C|)} i=0min(A,C)C(i,A)C(i,C) 。枚举所有的 ai 与 aj 的组合,求和即可得出答案。

但是,在枚举时,会发现时间复杂度是O(n^3), 需要优化 ∑ i = 0 m i n ( ∣ A ∣ , ∣ C ∣ ) C ( i , ∣ A ∣ ) ∗ C ( i , ∣ C ∣ ) \sum_{i=0}^{min(|A|, |C|)} {C(i,|A|) * C(i, |C|)} i=0min(A,C)C(i,A)C(i,C),这里就需要用到范德蒙恒等式

范德蒙恒等式推论: ∑ i = 0 m i n ( ∣ A ∣ , ∣ C ∣ ) C ( i , ∣ A ∣ ) ∗ C ( i , ∣ C ∣ ) = C ( m i n ( ∣ A ∣ , ∣ C ∣ ) , ∣ A ∣ + ∣ C ∣ ) \sum_{i=0}^{min(|A|, |C|)} {C(i,|A|) * C(i, |C|)} = C(min(|A|, |C|), |A| + |C|) i=0min(A,C)C(i,A)C(i,C)=C(min(A,C),A+C)

给一个学习的博客:范德蒙德卷积 - Gensokyo Algorithm Research Institute (enonya.github.io)

#include<bits/stdc++.h>
#define ll long long
using namespace std;const int maxn = 2000 + 10;
const ll mod = 1e9 + 7;ll C[maxn][maxn], P[maxn][maxn];
ll p[maxn];
int a[maxn];void init(){// 预处理组合数C[0][0] = 1;for(int i = 1; i < maxn; i++){for(int j = 0; j <= i; j++){C[i][j] = C[i-1][j];if(j-1 >= 0) C[i][j] += C[i-1][j-1];C[i][j] %= mod;}}// 预处理2的整次幂p[0] = 1;for(int i = 1; i <= 2000; i++) p[i] = p[i-1] * 2 % mod;
}ll f(int a, int b){ // 当时一个愚蠢的写法,忽略掉这个函数名if(a > b) swap(a, b);return C[a+b][a];
}int main(){init();int n;cin >> n;for(int i = 1; i <= n; i++) cin >> a[i];ll res = 0;for(int i = 1; i <= n; i++){for(int j = i+1; j <= n; j++){if(a[i] != a[j]){res += f(i-1, n-j) * p[j-i-1] % mod;res %= mod;				}}}cout << res << endl;return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

数字IC设计\FPGA 职位经典笔试面试整理--语法篇 Verilog System Verilog(部分)

注&#xff1a; 资料都是基于网上一些博客分享和自己学习整理而成的 Verilog 1. 数据类型 Verilog一共有19种数据类型 基础四种数据类型&#xff1a;reg型&#xff0c;wire型&#xff0c;integer型&#xff0c;parameter型 reg型   reg类型是寄存器数据类型的关键字。寄存…

新手学习Python第十一天,准备今天全部学完系列

——早上07&#xff1a;30到达实验室&#xff0c;开始学习&#xff0c;中秋小长假已过&#xff0c;心已收—— 一、__new__与__init__创建对象的过程 class Person(object):def __new__(cls,*args,**kwargs): *表示位置参数&#xff0c;**表示关键字参数print(__new__被调用…

快来尝尝,超赞的食家巷一窝丝

一窝丝&#xff0c;这个名字听起来就充满了诗意和神秘。当你第一次见到它时&#xff0c;定会被它那精致的外形所吸引。纤细如丝&#xff0c;盘绕在一起&#xff0c;宛如一个精美的艺术品。那丝丝缕缕&#xff0c;散发着淡淡的麦香味&#xff0c;仿佛在诉说着古老的故事。 制作食…

Imagen论文简要解析

Imagen论文简要解析 文章 Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding 具有深度语言理解能力的逼真文本到图像扩散模型 https://arxiv.org/pdf/2205.11487 摘要 文章介绍了一种名为Imagen的文本到图像扩散模型&#xff0c;该模型在理…

9.12日常记录

1.extern关键字 1&#xff09;诞生动机:在一个C语言项目中&#xff0c;需要再多个文件中使用同一全局变量或是函数&#xff0c;那么就需要在这些文件中再声明一遍 2&#xff09;用于声明在其他地方定义的一个变量或是函数&#xff0c;在当前位置只是声明&#xff0c;告诉编译器…

【鸿蒙 HarmonyOS NEXT】popup弹窗

一、背景 给组件绑定popup弹窗&#xff0c;并设置弹窗内容&#xff0c;交互逻辑和显示状态。 常见场景&#xff1a;点击按钮弹出popup弹窗&#xff0c;并对弹窗的内容进行交互逻辑处理&#xff0c;如&#xff1a;弹窗内点击跳转到其他页面 二、给组件绑定Popup弹窗 PopupOp…

【Python报错已解决】 TypeError: Descriptors cannot not be created directly

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

Android RecycleView 深度解析与面试题梳理

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 引言 在 Android 开发中&#xff0c;列表和网格布局是非常常见的界面元素&#xff0c;它们用于展示大量数据集合。RecyclerView 是 Android 提…

深度学习|损失函数:网络参数优化基准

文章目录 引言均方误差计算示例矩阵形式代码实现 交叉熵误差计算示例代码实现 绝对误差计算示例代码实现 Hinge Loss计算示例代码实现 Kullback-Leibler Divergence计算示例代码实现 结语 引言 在上文「深度学习&#xff5c;模型训练&#xff1a;手写 SimpleNet」中&#xff0…

Nodejs+vue+Express游戏分享网站的设计与实现 7a2s2

目录 技术栈具体实现截图系统设计思路技术可行性nodejs类核心代码部分展示可行性论证研究方法解决的思路Express框架介绍源码获取/联系我 技术栈 该系统将采用B/S结构模式&#xff0c;开发软件有很多种可以用&#xff0c;本次开发用到的软件是vscode&#xff0c;用到的数据库是…

Flink垃圾图片分类优胜奖比赛攻略_贪吃的小香猪-148队

关联比赛: Apache Flink极客挑战赛——垃圾图片分类 一. 赛题背景分析及理解 本次竞赛要求结合大数据计算引擎Flink和深度学习的计算平台Intel Analytics Zoo应用在图片识别场景&#xff0c;进行垃圾图片的分类。 目标&#xff1a;对提供的100类大约6000张垃圾图片进行模型训…

五星级可视化页面(30):本系列最后一期,压轴出场。

不知不觉分享了30期高品质的五星级可视化大屏界面&#xff0c;该系列文章也该收尾了&#xff0c;本期为大家分享最后一批界面&#xff0c;我们下一个系列专辑见。

A股上市公司企业创新能力、质量、效率-原始数据+dofile+结果(2006-2023年)

上市公司的创新能力体现在其不断研发新技术、新产品和服务的能力上&#xff0c;这是企业保持竞争优势的关键&#xff1b;质量则是指公司所提供的产品或服务达到高标准的程度&#xff0c;高质量是赢得客户信任和市场份额的基础&#xff1b;效率则涵盖了生产运营中的资源利用程度…

智能车镜头组入门(一)车模的选择

这篇文章&#xff0c;我会简单的介绍下车模的、轮胎和负压的选择 今年的镜头组是自制车模&#xff0c;这比较考验学校之前参赛的经验。我们选择了某飞的mini车模。提供智能车方案的无非就两家&#xff0c;某飞和某邱&#xff0c;我们学校之前都用的是某飞的&#xff0c;在某飞…

鸿蒙Harmony应用开发,数据驾驶舱 项目结构搭建

对于一个项目而言&#xff0c;在拿到我们的开发任务后&#xff0c;我们最重要的就是技术的选型。选型定下来了之后我们便开始脚手架的搭建&#xff0c;然后开始撸代码&#xff0c;开搞. 首先我们需要对一些常见依赖库的引入 我们需要再oh-package.json5的dependencies节点下面…

leetcode:最高乘法得分

用auto可以过 class Solution { public:long long maxScore(vector<int>& a, vector<int>& b) {int n b.size();vector<vector<long long>> memo(4,vector<long long>(b.size(), LLONG_MIN));auto dfs [&](auto&& dfs, i…

Qt安卓开发连接手机调试(红米K60为例)

1.前置条件 本人默认您已经完成Qt安卓环境的配置&#xff0c;若还没配置请参考链接文章&#xff1a;【Qt】最详细教程&#xff0c;如何从零配置Qt Android安卓环境_qt_七夕先生-开放原子开发者工作坊。准备一台目前主流在用的手机&#xff0c;其实自己用的就行(只要你不是某些…

LeetCode-137. 只出现一次的数字 II【位运算 数组】

LeetCode-137. 只出现一次的数字 II【位运算 数组】 题目描述&#xff1a;解题思路一&#xff1a;解题思路二&#xff1a;符号位一起判断。背诵版解题思路三&#xff1a;0 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每…

CentOS7.9环境上NFS搭建及使用

Linux环境NFS搭建及使用 1. 服务器规划2. NFS服务器配置2.1 主机名设置2.2 nfs安装2.2.1 repo文件替换2.2.2 NFS服务安装 2.3 nfs配置2.4 服务查看2.5 资源发布2.6 配置nfs服务开机自启2.7 端口开放 3.应用服务器配置3.1 主机名设置3.2 nfs安装3.2.1 repo文件替换3.2.2 NFS服务…

XML映射器-高级查询结果映射

01-高级查询结果映射 emp表 dept表 02-多表关联查询映射 多对一映射 项目中Emp类的数据 项目中dept类的数据 想要多表查询需要建个公共类里面写入两个表中的属性,如下面方法 type里要写用到的类型,由于继承Emp所有Emp里面的属性直接写,column是写数据库的别字,property是写字…