自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 Windows配置linux服务器免密登录

创建文件 .ssh/config。安装ssh-copy--id。

2024-05-04 17:51:34 166 1

原创 2022CCPC河南省省赛(BCEHIJK)

2022CCPC河南省省赛题解

2022-10-06 19:38:52 2112 1

转载 Ubuntu(20.04)修改镜像源

Ubuntu 镜像简介Ubuntu,是一款基于 Debian Linux 的以桌面应用为主的操作系统,内容涵盖文字处理、电子邮件、软件开发工具和 Web 服务等,可供用户免费下载、使用和分享。下载地址:https://mirrors.aliyun.com/ubuntu/配置方法域名说明对于阿里云ECS用户,可以直接使用内部域名访问,而对于非云用户则需要使用公网域名 mirrors.aliyun.com 来访问。图形界面配置新手推荐使用图形界面配置: 系统设置 -> 软件和更新 选择下载

2022-02-15 19:03:04 825 1

原创 Codeforces Round #757 (Div. 2) C

文章目录C. Divan and bitwise operationsD1. Divan and Kostomuksha (easy version)D2. Divan and Kostomuksha (hard version)C. Divan and bitwise operations题解:已知区间[l,r][l,r][l,r]OR值xxx,根据或运算可以发现,如果这个xxx值的第iii位是0的话,那么区间[l,r][l,r][l,r]的每一个元素的第iii必定都是0;如果这个xxx值的第iii

2021-11-29 18:59:12 723

原创 Codeforces Round #726 (Div. 2) D

题解:首先考虑nnn为奇数的时候如果nnn是质数,先手没法进行操作,先手必输;nnn必然可以拆成两个奇数的乘积假设为p1∗p2p_{1}*p_{2}p1​∗p2​,不管先手选择p1p_{1}p1​还是p2p_{2}p2​,后手面对的都是奇数与偶数相乘的局面,只要后手的操作每次都让先手面对两个奇数相乘的局面,那么先手最后必然会面对素数的局面,先手必输其次考虑nnn为偶数的时候如果nnn不是2的幂次方,即n=2t∗k(k为奇数)n=2^t*k(k为奇数)n=2t∗k(k为奇数),先手则面对的是奇数与

2021-11-16 12:33:33 94

原创 Codeforces Round #698 (Div. 2) BC

文章目录B. Nezzar and Lucky NumberC. Nezzar and Symmetric ArrayB. Nezzar and Lucky Number题解:假设一个数可以拆成kkk个ddd的和再加上一个余数, 如果余数与kkk中若干个ddd可以组成一个 lucky number,那么说明这个数就是 lucky number还有一点就是,如果这个数大于10倍的ddd,说明这个数就一定是 lucky number 。假设ddd是7,10倍的ddd就是70,那么这个数就可以拆成若干个7

2021-11-16 10:40:28 278

原创 1009: 湖南省第十三届大学生计算机程序设计竞赛(HNCPC2017)

题目描述:题解:要想比赛次数尽可能的多,那么就让平局尽可能多,要想让比赛次数尽可能的少,那么就让胜场尽可能多。已知分数,要根据分数来推出进行的比赛场数就得明白分数的分配方法。我们知道胜一场3分,负一场不要得分,平一场两边各的一分。将所有队伍得分加起来,然后找出最高得分,如果最高分大于总分的一半的话,那么这个得分最高的队伍必定不是全部平局;如果最高分不大于总分的一半的话,那么就可以有sum2\frac{sum}{2}2sum​场平局。假设所有队伍队伍得分是{5,1,2,4},最高分是5,总分是12

2021-11-11 20:51:08 726

原创 Educational Codeforces Round 104 (Rated for Div. 2) B C D

文章目录B. Cat CycleC. Minimum TiesD. Pythagorean TriplesB. Cat Cycle题解:我们通过简单打表发现,没经过n2\frac{n}{2}2n​次,AB两只猫就会走到相同的位置,此时B猫就会跳一次, 那么k个小时跳的次数就是kn2\frac{k}{\frac{n}{2}}2n​k​下取整,则最后B猫就相当于走了k+kn2k+\frac{k}{\frac{n}{2}}k+2n​k​次,然后对n进行取余便是最后答案。这里可以先将k–,便于取模操作,最后

2021-11-11 19:49:06 629

原创 2021CCPC河南省省赛

文章目录1001 收集金币1005 闯关游戏1010 小凯的书架1001 收集金币题目链接//dp[i][0]表示前i个事件都没有选择使用技能//dp[i][1]表示前i个事件已经选择使用技能了int dp[N][2];void solve(){ memset(dp, 0, sizeof dp); int n; cin >> n; for (int i = 1; i <= n; i ++ ) { string op; int v

2021-11-04 19:11:17 4163

原创 2020年河南省CCPC大学生程序设计竞赛 太阳轰炸(二项分布)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分

2021-10-31 09:49:44 417

原创 HDU - 3746(字符串最小循环节)

题目链接:Cyclic Nacklace题目大意:给定一个字符串,只能在该字符串最左端和最右端增加字符,最少增加多少个字符可以使得该字符串可以由其中一个字串循环得到思路:题目既然要求最后得到的字符串可以由其字串循环得到,而且只能在左边和右边增加字符,很明显就是字符串的最小循环节问题首先利用KMP算法求得原字符串的next数组因为i - next[i]为以第i个字符结尾的字符串的最小循环节长度假定题目给定的字符串长度为n, 那么该字符串的最小循环节长度 k = n - next[n]我们对最小

2021-10-27 11:09:45 640

原创 AtCoder Regular Contest 128 (AB)

A - Gold and Silver官方题解简直yyds 官方题解但是官方题解的代码不是C++,还是附上C++代码吧int a[N], ans[N];int main(){ IOS; int n; cin >> n; for (int i = 0; i < n; i++) cin >> a[i]; for (int i = 0; i < n - 1; i++) { //这里的异或运

2021-10-18 21:48:29 693

原创 2021CCPC网络赛(重赛)Monopoly

官方题解:我用的是外层采用哈希,内层采用map的方式其中有一个点就是一定要把所有的余数都取正,即(x%sum+sum)%sum,因为经过循环不仅可以往上加, 还可以向下减就比如这个样例12 2-1 35-5正确答案应该是7 -1但是如果余数不取正的话,第一个输出的结果就是-1了代码如下:#include <unordered_map>//#include <unordered_set>#include <algorithm&gt

2021-10-16 16:59:20 295

原创 2021中国大学生程序设计竞赛(CCPC)- 网络选拔赛(重赛)hdu-7131

题目大意:给定一个序列s,求【前缀是nunhehheh后缀是>=1个a】的子序列个数题目思路:定义dp[i][j]为s序列前i个字符与nunhehheh匹配j个字符的个数预处理出每个i后边有多少个a,用数组suf表示对于每个dp[i][8]成2的suf[i]幂次方重点解释一下为什么是dp[i][8]而不是dp[i][9] --因为前缀是以h结尾,每次匹配到h时我们对答案加上dp[i][8]*2^suf[i] --如果是dp[i][9]的话,会重复加上之前我们计算过

2021-10-14 20:29:13 308

原创 AtCoder Beginner Contest 221 E

题意:给定一个序列,问有多少个非空子集满足如下要求:1. 子集元素的个数不少于2。2.,即子集第一个元素不大于最后一个元素。分析:我们知道n个元素有个非空子集。设第一个元素为最后一个元素为,这两个元素之间就有个元素。那么以为第一个元素,以为最后一个元素的子集就有个。枚举,最后的答案就是。将这个公式转化一下,每次枚举i的时候,可以先算出,然后在乘上。因为要对区间和做修改,所以用树状数组来存2的幂次方的求和。数据范围太大,但是n的范围在3e5,所以需要离散化.

2021-10-05 19:58:44 125

原创 The 2021 ICPC Asia Regionals Online Contest (II) G(泰勒公式展开)

吃了高数没学好的亏啊题解参考大佬博客:大佬博客这是一些常见的泰勒展开式题目:LL gcd(LL a, LL b){ return b ? gcd(b, a % b) : a;}LL a[N], b[N];int main (){ LL n, t; scanf("%lld%lld", &n, &t); for (int i = 1; i <= n; i ++ ) scanf("%lld%lld", &a[i], &b[i]);

2021-10-02 17:19:44 208

原创 第二十届蓝桥杯c++ B组 砝码称重

题目链接:砝码称重题解:f[i][j]表示选择前i个砝码总重量为j是否可以得到我们设定砝码放在左边为正,放在右边为负对于枚举到当前这个砝码,我们有三种选择方案:1. 不选。则当前状态与上一个状态方案相同,即f[i][j] = f[i-1][j]2. 选择放在左边。则f[i][j] = f[i-1][j-w[i]]3. 选择放在右边。则f[i][j] = f[i-1][j+w[i]]。因为放在右边为负的,当前状态为j则上一个状态应该为j+w[i]在这里j-w[i]会出现负数

2021-09-30 16:34:17 1168

原创 CCPC2019河南省赛 咕咕的计数题 II

题解:参考大佬博客:大佬博客打表容易发现,不小于a * a的数一定满足,剩下小于a * a的数满足的个数可以用等差数列求和来算要求区间[l,r]满足条件的个数,即为区间[1, r]满足的个数减去区间[1, l - 1]满足的个数这里要特别注意边界问题LL a, l, r;LL solve(LL x){ if (x == 0) return 0; LL d = x / a, ans = 0; //d>=a说明r>=a*a; if (d >=

2021-09-29 19:53:52 102

原创 2021上海省赛 H. 鸡哥的 AI 驾驶(二分)

题解:将所有汽车按位置排序,对时间进行二分对于不同型号的汽车,如果它们的相对位置发生了改变,那么肯定发生了相撞例如3种不同型号的汽车按位置排序之后是这样的 1 1 2 3 3 1 1前两辆车只能在前两个位置任意移动第3辆车只能在该位置第四第五辆车只能在该两个位置任意移动最后两辆车可以在最后两个位置任意移动如果相对位置发生交换,那么这期间必发生相撞所以对每个时间进行位置更新,然后排序,看相对位置是否发生变化int n, k;struct node { int p, v, t;

2021-09-22 20:49:23 361

原创 AtCoder Beginner Contest 219 D - Strange Lunchbox(DP)

题解:题目要求至少x个第一种食物,y个第二种食物的最小方案数dp(i, j, k)表示在前i个餐盒内选,有第一种食物j个,第二种食物k个的最小方案数那么状态转移方程就是dp(i, j, k) = min(dp(i, j, k), dp[max(0, j - p[i].fi)][(max(0, p[i).se] + 1);可以用类似01背包的方法去掉第一维,但是第二重循环和第三重循环就要逆序枚举int dp[500][500];PII p[500];//pair类型int main (){

2021-09-21 16:32:01 264

原创 B. Divide Candies (思维)

题目链接:B. Divide Candies题意:给两个整数n,m,问有多少种情况满足(i2 + j2) % m == 0 (1 <= i, j <= n);题解:我们将式子转化一下,变可以得到如下结果(i2 + j2) % m = (i2 %m+ j2%m) %m = ((i % m * i % m) + (j % m * j % m)) % m如此我们就只需要统计余数0~m-1有多少个即可,用cnt数组存储个数然后枚举余数i,j,计算答案int cnt[N];int mai

2021-09-15 20:50:40 134

原创 Codeforces Round #742 (Div. 2) BC

B题意:给一个正整数a和一个非负整数b,要求找到最短序列的长度,满足除去序列中所有元素后的最小正整数等于a,所有元素的异或值为b题解:首先这个序列中必定存在0~a-1这a个元素还有这个规律应该不难发现a % 4 == 0时,这a个元素的异或值为0a % 4 == 1时,这a个元素的异或值为a - 1a % 4 == 2时,这a个元素的异或值为1a % 4 == 3时,这a个元素的异或值为a然后我们需要考虑是否再加入元素,使之与之前a个元素的异或值的异或值为b如果我们知道a ^ b =

2021-09-06 11:08:27 82

原创 AtCoder Beginner Contest 216 D(构图 + 拓扑排序)

首先感谢大佬博客的题解,拓扑排序yyds!大佬博客题解:对于每一个圆筒内的球,只有上边的拿走之后才能拿走下一个,从上到下连单向边例如1->2->3,1拿走2才能拿,2拿走之后3才能拿对于所有圆筒,最后可以构建一个有向图,如果出现环的话,肯定不能满足题目要求例如1->2->3->1,1拿走2才能拿走,2拿走3才能拿走,3拿走1才能拿走,这就矛盾了对于2n个点,拿n次才能恰好拿完,如果出现环的情况,拓扑排序的答案必定不是n代码如下:int h[N], ne[2 *

2021-09-04 15:35:31 207

原创 Deltix Round, Summer 2021B. Take Your Places!

题解:​​最后要求得出的序列只有两种情况奇数 偶数 奇数 偶数…偶数 奇数 偶数 奇数…首先统计奇数和偶数的个数如果奇数与偶数个数差大于1的话,那么肯定没有答案的,输出-1如果奇数的个数大于偶数的个数,那么第一个数肯定是奇数,看所有奇数是否在它应该在的位置上如果偶数的个数大于奇数的个数,那么第一个数肯定是偶数,看所有偶数是否在它应该在的位置上如果奇数个数与偶数个数相同的话,就需要找两种情况的最小值代码如下:int main (){ int T; cin >&g

2021-09-04 09:35:26 117 1

原创 Gym - 102875C (江苏省省赛)

题目要求相同高度的猫之间必须要有比它们矮的猫,所以在每两个高度相同的猫之间插一个比他们的矮的猫即可例如3 2 3 1 3 2 3我们不难发现高度为1的猫最多只能出现次高度为2的猫最多只能出现次高度为3的猫最多只能出现次...以此类推,那么所有高度的猫最多能出现次,这个数据是大于题目要求的数据范围的不妨建一棵树二叉树来看可以发现,我们要输出的结果刚好就是二叉树的中序遍历的结果因此我们只需进行一次二叉树的中序遍历即可代码如下:int n;//二叉树中序.

2021-09-03 19:59:15 108

原创 AtCoder - arc125_a Dial Up

如果a数组中不含有得到b数组所需的数字,那么就直接输出-1,否则就有答案只有a与第一次不相等从a数组中找到第一个与最后一个与不相等的数的位置,位置标记为l和r,那么第一次需要移动的次数就是后续如果发生不匹配的情况移动只需在01之间来回移动,所以每次移动的次数都是1答案就是每次移动次数加上复制的次数1int a[N], b[N], n, m;void get_l_r(int cur, int &l, int &r){ for (int i = 1; i &

2021-09-01 14:46:14 160

原创 AtCoder - arc125_b (思维+公式推导)

题目要求(c为整数)有多少个整数对{x,y}满足条件将公式化简一下得到如下结果令,不难得到,每一组都唯一对应一组,因为x和y都为正整数,所以a和b的奇偶性必须相同,因为只有奇数+奇数或者偶数+偶数才能被2整除又因为x和y的范围为,所以可以考虑枚举a,b可以取到的最大值就是,为了避免重复,每次只取之间满足的数,边界为a为奇数,b就取所有的奇数,a为偶数,b就取所有的偶数1~n之间的奇数个数或偶数个数公式为int main (){ LL n, res...

2021-08-31 19:24:46 212

原创 HDU - 6979

对R,G,B求前缀和混合模式为1时,屏幕上显示的颜色就是当前图层的颜色,与其他图层无关用一个last数组记录每一个模式2之前出现模式1的图层的位置询问时对左端点去max(l,last[r]),这样就不会多减了另一个难点就是进制转换了,但只要知道%X是直接取16进制整数的话就没那么麻烦了int R[N], G[N], B[N], last[N];void solve(){ int n, q; scanf("%d%d", &n, &q); for (in

2021-08-31 10:40:24 95

原创 51Nod - 1267 (二分)

题目要求四个数和为0,我们枚举两个数的和,然后二分查找另外两个数的和,使之相加为0既然要二分,那么必须先对数组排序这里我具体解释一下为什么二分的范围是j + 1~ n - 1因为我们已经对数组排好序了,如果存在四个数的和为0,那么这四个数任意两个数的和都等于另外两个数的和的负数为了避免重复选,所以我们的二分范围就是在当前枚举的两个数后边LL a[1100];int main (){ int n; scanf("%d", &n); for (int i...

2021-08-30 18:17:13 95

原创 CodeForces - 1360F. Spy-string

数据范围很小,直接暴力枚举,时间复杂度O(m*26*n*m)对于答案串,要求与所有串比较只能有一个位置字符不同任意以一个串作为答案串,枚举它的所有变化,只改变它任意一个位置的字符,然后跟这n个串进行比较,如果满足题目条件则输出答案string s[20];void solve(){ int n, m; cin >> n >> m; for (int i = 0; i < n; i ++ ) cin >> s[i]; str

2021-08-30 16:31:39 93

原创 CodeForces - 1343C. Alternating Subsequence

题目要求的是子序列,而并不是连续子序列,而且要满足两个要求1. 子序列最长2. 子序列相邻元素正负性要不同每次从连续的正负性相同的元素中选取一个最大值加入到答案中最后的答案既满足题目要求,和也最大int n, a[N];int sign(int x){ if (x > 0) return 1; if (x < 0) return -1; return 0;}void solve(){ scanf("%d", &n);

2021-08-30 15:54:57 153

原创 AtCoder - arc072_a (思维)

感谢大佬博客题解:大佬博客对前缀和不满足的更改为1或-1,统计更改次数即可值得注意的是有两种情况,一种是奇数位为正偶数为负, 另一种是奇数位为负偶数位为正的情况,这两种情况要取最小值LL prefix[N], ans = 2e18, a[N];int n;void solve(){ LL t = 0; for (int i = 1; i <= n; i ++ ) { //边更改边计算前缀和,这样就避免了更改当前位之后对后续前缀和的影

2021-08-30 14:57:26 98

原创 HDU - 6709(思维+贪心)

感谢两位大佬的博客:大佬博客大佬博客题解:首先第一条鱼是要在煮鱼之前要钓的。如果煮鱼期间我们可以钓到这么多鱼,如果不小于n - 1,那么就不会浪费时间,否则少的鱼数就需要我们再花费时间去抓。我们对每一个从大到小排序,少几条就加上几条浪费的时间代码如下void solve(){ LL n, k; scanf("%lld%lld", &n, &k); LL ans = k, cnt = 0; for (int i = 0; i < .

2021-08-30 11:23:16 133

原创 HDU - 6702 ^&^ (思维)

题解:题目要求(A ^ C)&( A ^ C)最小,通过观察二进制位可以发现,当A与B对应的二进制位都为1时,C与之对应的二进制位为1,结果对应的二进制位就为0,当A与B对应的二进制位为0和1时,C与之对应的二进制位不管是1还是0,结果都一样。综上可以发现只需要让C = A & B 即可让结果最小注意题目数据范围和要求,当C为0时要输出1代码如下:int main (){ int T; scanf("%d", &T); while (T -- ) .

2021-08-27 10:46:49 129

原创 CodeForces - 1290A (思维)

以下内容参考该大佬题解大佬博客题解:如果k >= m - 1的话,最终结果就是可控的,否则就要枚举所有情况一重循环枚举可控情况,一重循环枚举不可控情况,时间负责都O(n2)在可控情况下求最大,不可控情况求最小,每次取两端最大值可控人数为k,不可控人数为m - 1 - k假设可控的人中,有i个人取前端,不可控的人中有j个人取前端,那么你可以取的数就是前端a[i + j + 1],尾端a[n - (k - i) - (m - 1 - k - j)]那么当前能取的最大值为max(a[i +

2021-08-26 17:38:21 89

原创 Codeforces Round #740 (Div. 2) B C

B. Charmed by the Game题目大意:A和B轮流发球,给出A和B的胜利场数a和b,但是不知道谁先发球,问最后破发球次数的所有可能。接球一方胜利即为破发球。题解:因为不知道谁先发球,所以可以分为两种情况, 一种为A先发球,另一种为B先发球每个人发球的次数很容易得出来,定义x = (a + b) / 2,y = a + b - x 那么A要么发球x次,要么发球y次。A发球x次:若A在发球中胜利i次,那么A就有a - i次破发球,B就有x - i破发球,a - i + x - i即为总

2021-08-26 09:54:01 95

原创 Codeforces Round #739 (Div.3) F1,F2

F1题解:因为1 <= k <= 2,所以可以直接讨论k == 1和k == 2的情况,方便计算,使用字符串处理当k == 1的时候,我们只需找到第一个大于等于n的由一个数字组成的字符串即可string solve1(string n){ for (int ch = '1'; ch <= '9'; ch ++ ) { string t(n.size(), ch); if (t >= n) return

2021-08-23 11:37:25 97

原创 HDU 4821 String (字符串哈希)

Given a string S and two integers L and M, we consider a substring of S as “recoverable” if and only if(i) It is of length M*L;(ii) It can be constructed by concatenating M “diversified” substrings of S, where each of these substrings has length L; two s

2021-08-03 17:51:02 112

原创 HDU 3336 Count the string (KMP+DP)

It is well known that AekdyCoin is good at string problems as well as number theory problems. When given a string s, we can write down all the non-empty prefixes of this string. For example:s: “abab”The prefixes are: “a”, “ab”, “aba”, “abab”For each pre

2021-08-03 15:02:13 107

原创 HDU 6958 KD-Graph(带权并查集)

题目链接:KD-GraphProblem DescriptionLet’s call a weighted connected undirected graph of n vertices and m edges KD-Graph, if thefollowing conditions fulfill:n vertices are strictly divided into K groups, each group contains at least one verticeif verti

2021-07-31 20:50:05 142

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除