自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 树的遍历(递归)

【代码】树的遍历(递归)

2023-02-24 20:26:12 166 1

原创 牛客小白月赛61-E

首先要知道 逆序对数=n!/2*(不相等的数字对儿数)要注意的是 这里除2不能直接除 乘上了2的逆元。给你一个长度为n的序列,它有n!个排列方法中 逆序对的总数是多少。不相等的数组对儿数=

2022-11-19 10:52:03 550

原创 【无标题】

题目大意是给出一个数组a,每个元素只可操作一次(将a[i]变成a[i]*i),问最少操作几次可以使Πa[i]被2的n次方整除,首先这个数组连乘起来可以确定的是她们有多少个2的次方,我们把这个数求出来,与2的n次方比较大小,贪心的做法去找需要乘上多少个2的次方,从大到小去找,如果当前所得的2的次方数比2的n次方大,说明一定有一个小的可以实现。

2022-11-01 10:09:56 186

原创 牛客小白月赛59-F 困难卷积

我们记录a和b中每个数字出现的次数,因为相同的数字开方所得的结果是相同的,没有必要反复求。

2022-10-29 19:14:52 178

原创 Educational Codeforces Round 136 (Rated for Div. 2)-C

思路还是不够清晰,搞了半天没搞出来。要多练练这种题呀!给牌做个标记,max=1,max-1=2,max-2=3,max-3=4;

2022-10-09 21:24:41 116

原创 Meeting on the Line(ccodeforces #823)

求最佳位置

2022-10-07 16:44:02 126

原创 codeforces#823-C(优先队列)

【代码】codeforces#823-C(优先队列)

2022-10-06 09:46:43 111

原创 2022河南省ccpc省赛题解

2022ccpc

2022-10-05 11:14:19 1305

原创 第十六届东北地区大学生程序设计竞赛-I

不太理解为什么是从1+1/2+1/3+1/4+…+1/(n-1),而不是到1/n。

2022-09-30 10:14:34 254

原创 一道难题(dfs)

【代码】一道难题(dfs)

2022-09-20 20:48:42 61

原创 调和级数。

【代码】调和级数。

2022-09-20 19:21:08 84

原创 列表排序(枚举)

其实只要把行和列交换的顺序换一下就可以了 比赛的时候一直想着先交换行再交换列 正解是先交换列 再交换行。

2022-09-03 21:57:19 153

原创 E. Counting Rectangles(二维前缀和)

【代码】E. Counting Rectangles(二维前缀和)

2022-09-03 09:44:11 139

原创 简单题(百度之星2022)

【代码】简单题(百度之星2022)

2022-08-31 21:52:37 640

原创 小度养猫

【代码】小度养猫。

2022-08-30 20:25:22 195

原创 数列分块入门——loj

数列分块入门1传送门数列分块 就是把一个数组分成一块一块的每个块的大小为sqrt(n) 对于每次对元素的查询修改 可以直接对它所在的块操作 可以节省很多时间//乱七八糟的维护区间的 用分块去做//分了根号n块 复杂度为根号n #include<bits/stdc++.h> using namespace std;const int maxn=1e5+10;long long belong[maxn],block,l[maxn],r[maxn],num=0;long long n

2022-05-17 19:01:03 399

原创 仓鼠更有精神

传送门斗争了一个小时 还是超时先放到这里吧 ,但是还是很不情愿,有没有大佬帮我看看还能不能优化啊#include<bits/stdc++.h>using namespace std;int b[1001100];int main(){ string a; int i,j,k,m,n,t; ios::sync_with_stdio(0); cin.tie(0); cin>>t; while(t--) { cin>>a>>k;

2022-05-16 20:28:57 120

原创 codeforces 1661C

传送门题目是说 有一排树 他们有一个初始高度a[i] ,从第一天开始给这些树胶水,奇数天树的高度可以增加1,偶数天可以增加2,问最少需要多少天这些树的高度可以一样高,每一天都可以选择给一棵树浇水,或者一颗都不浇思考一下 ,一颗树浇到最大的高度 只有两种情况,要么全部由偶数天来浇,要么是一些偶数天 加上一天奇数天,统计一下所有的树,一共需要多少奇数天,多少偶数天,如果偶数天比奇数天多,我们可以把空闲的没有用的上的奇数天,来补偶数天,均衡一下奇偶,如果是奇数天比偶数天多,那便没有办法用偶数天来补了,还有一

2022-05-15 08:45:22 140

原创 Binary String To Subsequences(子序列问题)

传送门思路不能有两个1挨着 ,也不能有两个0挨着,用两个容器存子序列的最后一个元素是第几个子序列里的,每当遇到一个0 尝试把它放到一个以1结尾的子序列末尾去,如果不行,就单独的为它开辟一个新的子序列,遇到1也是如此code#include<bits/stdc++.h>using namespace std;int main(){ int i,j,k,m,n,t; string a; std::ios::sync_with_stdio(0); cin.tie(0); ci

2022-05-05 20:17:42 149

原创 闯关游戏(ccpc河南省赛)

传送门滚动dp因为当前的状态只与dp【i-1】有关 我们没有必要保留前面所有的项的值 只需要保留对我们有用的即可01背包 因为如果某一关卡直接跳过的话游戏就结束了 所以不能取max要给他一个初值后 再取最大值#include<bits/stdc++.h>using namespace std;int dp[3][6100];int a[6010],b[6110],c[6110],d[6101];int main(){ std::ios::sync_with_stdio(0);

2022-05-03 21:33:52 991

原创 Unequal Array(思维)

传送门直接看样例吧81 1 2 3 4 5 7 7现在的值为2 我们要将其变为0 或者1先变第一对1 x x 3 4 5 7 71 x y y 4 5 7 71 x y z z 5 7 71 x y z m m 7 71 x y z m n n 7 好了目前只剩一对了 大概思路就是这样#include<bits/stdc++.h>using namespace std;const int N=1e5;int a[N*2+10];int main(){ i

2022-04-27 19:50:39 327

原创 二叉树的创建、层序遍历

pta浪漫侧影中序和后序遍历创建二叉树、层序遍历#include<bits/stdc++.h>using namespace std;const int N=400000;int po[N],mid[N],id[N],lc[N],rc[N],m[N];int depth[N],cnt=0;int creat(int lm,int rm,int lp,int rp){ if(lp>rp) return 0; int root=po[rp]; int numl=rm-i

2022-04-19 21:29:13 359

原创 Subtract Operation(set容器)

传送门题解:给你一个长度为n的数组 一个数字k 每次可以选择删除数组中其中一个元素 其他剩下的所有元素的值都要减去被删掉的这个元素 问最后剩下的那个元素能不能等于k每个元素减去的都是相同的值 所以二者之间的差值恒定不变,我们只需要找是否存在两个元素的差值为k即可 不能双层for,会超时,可以用set容器,一层for去找是不是存在inpu44 54 2 2 75 41 9 1 3 42 1717 02 1718 18outputYESNOYESNO#include<b

2022-04-18 20:34:39 189

原创 矩阵列平移(pta)

理解错题意啦,我以为是分别向下移动1个和k个,结果是1到k个 害!也就是 第2列移动1个 第4列移动2 个 第6列移动 3个 以此类推#include<bits/stdc++.h>using namespace std;int a[110][110],n,m,p,k,z[110];int main(){ int i,j; cin>>n>>k>>p; for(i=1; i<=n; i++) { for(j=1; j<=n.

2022-04-18 20:11:23 357

转载 int128的使用

转自这里输入输出模板#include <iostream>using namespace std;typedef __int128_t int128;int128 read(){ int128 x=0;bool f=0;char c=getchar(); while (c<'0'||c>'9'){if (c=='-')f=1;c=getchar();} while (c>='0'&&c<='9'){x=(x<&

2022-04-16 19:56:58 1842

原创 乘法逆元。

传送门大佬博客#include<bits/stdc++.h>using namespace std;const int N=1e6;long long inv[N*3+10];int main(){ int i,j,k,m,n,p; scanf("%d%d",&n,&p); inv[1]=1; for(i=2;i<=n;i++) { inv[i]=(p-p/i)*inv[p%i]%p; } printf("1\n"); for(i=2;i

2022-04-15 21:02:12 150

原创 求组合数(记忆化搜索)

传送门递归递归一直递归 如果遇到之前已经求出来的直接加上就可以了 要注意的是,我一直忽略了m为0的情况,我一直认为m不可能为0,其实也可以啊,m为0的时候只有一种方案就是所有的都不取,就可以了#include<bits/stdc++.h>using namespace std;long long f[2100][2100];const long long mod=1000000007;long long solve(int x,int y){ if(f[x][y]!=-1)

2022-04-15 19:08:33 322

原创 Tree Infection(模拟)

传送门一开始以为跟二叉树有关 一看到就头疼 看了题解发现跟二叉树没啥关系,看了好长时间才明白一秒内可以做俩操作:感染一个健康的节点传染相邻的兄弟节点思路sum[i]表示以i为节点的节点个数有几个,一开始去感染最多的那个群体 为什么呢?因为这样可以给这个群体更多的彼此间互相传染的时间,在他互相传染的时间里,我们去感染其他群体如果所有的群体我们都已经感染了一个,计算在这个时间内 每个群体剩余的没有被感染的节点的个数,我们再重复以上操作(找到最多的 去感染,让其传染,在这个时间内去感染其他节点)

2022-04-14 19:57:21 538

原创 Good Pairs(构造)

这题很有意思 虽然我第一眼没看出来咋做 但是蒙对了传送门题目是说 找一个i 一个j使数组中所有的 abs(ai-ak)+abs(ak-aj)=abs(ai-aj) 怎么才能使所有的k都满足这个式子呢 我们把绝对值去掉 变成ai-ak+ak-aj=ai-aj 那怎么才能得到这个式子呢 只需要满足 ai>ak>aj也就是ai取数组中的最大值 aj取数组中的最小值即可#include<bits/stdc++.h>using namespace std;const int

2022-04-13 21:17:11 208

原创 谷歌的招聘(pta)

学俩新函数substr stoi#include<bits/stdc++.h>using namespace std;typedef long long ll;int pr(int x){ if(x==1||x==0) return 0; for(int i=2;i<sqrt(x);i++) { if(x%i==0) return 0; } return 1;}int main(){ int i,k,n;// init(); string s;

2022-04-13 20:22:07 377

原创 造桥(牛客)

今日教训:当有字符串的时候,而像我这种不认真看数据范围的人,直接用string,这样怎么也不会爆!牛客小白#include<bits/stdc++.h>using namespace std;char s[1010010];int f[40];int main(){ int i,j,k,m,n,t; scanf("%d",&t); while(t--) { memset(f,0,sizeof(f)); int ans=0; scanf("%d",&am

2022-04-11 21:11:54 261

原创 Getting Zero(思维)

codeforces一开始我只想着让她加 随便加几个应该就能得出答案了,没想太细,没有想到这个32768跟2的关系 32768是2的15次方 所以任何一个数 只要乘以2的15次方,就一定可以得到0,我们要让n加上1的次数控制在15以内,因为这个答案的最大值是15浅看一下吧#include<bits/stdc++.h>using namespace std;const int k=32768;int f[10]= {0,32768,65536};int main(){ int

2022-04-11 19:08:10 380

原创 codeforces 1665A (GCD vs LCM)思维

传送门我还在那分奇数偶数直接输出 n-3 1 1 1 这样最大公约数和最小公倍数都是1#include<bits/stdc++.h>using namespace std;int main(){ int i,j,k,m,n,t; scanf("%d",&t); while(t--) { scanf("%d",&n); if(n==4) { printf("1 1 1 1\n") ; continue; } printf

2022-04-10 20:29:44 225

原创 codeforces1660(Get an Even String)

codeforces把所有可以构成偶字符串的字符个数统计出来 用字符串长度减去可以构成的长度 就是我们需要删去的字符个数#include<bits/stdc++.h>using namespace std;string s;int book[30]; void solve(){ memset(book,0,sizeof(book)); int m=0; for(int i=0;i<s.size();i++) { if(!book[s[i]-'a'])//如果当前字

2022-04-10 16:23:49 266

原创 训练题AFG

A#include<bits/stdc++.h>using namespace std;int main(){ int h,m,s; h=7; m=31+24; s=26+15; printf("%02d:%02d:%02d",h,m,s); return 0;}F#include<bits/stdc++.h>using namespace std;int dp[50];int main(){ int i,j,k,m,n; scanf("%d"

2022-04-08 19:44:06 168

原创 承压计算(蓝桥杯)

传送门#include<bits/stdc++.h>using namespace std;double a[40][40];int main(){ int i,j,k,m,n; for(i=1; i<=29; i++) { for(j=1; j<=i; j++) scanf("%lf",&a[i][j]); } for(i=1; i<=30; i++) { for(j=1; j<=i; j++) { if(i==1)

2022-04-07 14:51:22 260

原创 k倍区间(蓝桥杯)

求前缀和 直接取余 每个余数相同的可以组成一对两两相互组合 删去重复的详情见传送门#include<bits/stdc++.h>using namespace std;const int N=1e5+10;//long long dp[N];long long s[N];int main(){ int i,j,k,m,n; long long ans=0; scanf("%d%d",&n,&k); for(i=1; i<=n; i++) {

2022-04-07 11:14:53 76

原创 日期问题(蓝桥杯)

我们把6种可能的情况都放到结构体里 然后按大小进行排序 在输出的时候判断一下这个日期是不是可能的即可首先1960之前的年份和2059之后的年份都不是可能的年份闰年要特别判断一下 闰年的2月有29天 平年的2月有28天天数大于当前月份的最大日期时不是可能的日期月份不在1到12之间的不是可能的日期最后要注意不能重复输出相同的日期 用数组标记一下即可#include<bits/stdc++.h>using namespace std;int m[14]= {0,31,29,31,3

2022-04-06 21:23:31 456 2

原创 平面划分.

n条直线最多可以分成几个平面 fn= n*(n+1)/2 +1n条折线最多可以分为几个区域 dn=f 2n-2n传送门例题训练题最开始一条直线最多与7条直线相交 最多可以得到6个平面 然后下一条直线最多与8条直线相交 可以得到7个平面 以此类推 答案为47...

2022-04-04 21:32:14 218

原创 KartRider(思维)

传送门当在t秒时刻内,能走的路程是t m,方向或正或反,都可以我们依次累加,+1,+2,+3 直到sum>=n 这还不够 如果跑过了,我们还要选着中间某个时间点返回一次 ,比如 1+x=10>n=9那1 可以选择反方向 -1+x=8<9 也不可以 所以我们只能在一个偶数的点选择返回 也不是返回 大概是这个意思吧#include<bits/stdc++.h>using namespace std;long long solve(long long n){ lon

2022-04-01 20:26:06 388

空空如也

空空如也

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

TA关注的人

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