- 博客(77)
- 收藏
- 关注
原创 CF793D(记忆化搜索)
CF793D每次的走一步,可以选择的区域就缩小,搜索很显然会T,此时加一个记忆化即可。搜索时以当前点,链长和可选区间为搜索状态。AC代码#include <bits/stdc++.h>#define yes puts("yes");#define inf 0x3f3f3f3f#define linf 0x3f3f3f3f3f3f3f3f#define ll long long#define ull unsigned long long#define debug(x) cout&
2022-02-28 19:21:25 371
原创 AtCoder Beginner Contest 234 G - Divide a Sequence
AtCoder Beginner Contest 234 G - Divide a Sequence题目给定一个长度为N的序列,任意的将其划分为任意长度大于零的若干个子串,对于任意一个子串SiS_iSi有一个权值max(Si)−min(Si)max(S_i) - min(S_i)max(Si)−min(Si),将其设为ViV_iVi,对于整个序列,其权值W=V1∗V2∗V3…∗VkW = V_1 * V_2 * V_3 \ldots * V_kW=V1∗V2∗V3…∗Vk,现求对于长度
2022-01-18 23:21:41 519 1
原创 关于浮点数处理时的细节
浮点数细节大小比较bool Isequ(double x,double y){ return (abs(x - y)) < eps;// eps 是自己设置的精度}提取整数位因为机器中存储一些临界值的精度损失(比如1在机器中是0.9999999999,而5可能存的是5.000000000000001),所以单纯向上或者向下取整得到浮点数的整数位是十分危险的一件事。网上大多数方法都可能在边界上出现错误,在debug时简直是一场灾难,应当采用如下方法int get_int(doub
2022-01-17 17:11:20 388
原创 单调队列一些不成熟的想法
单调队列一些不成熟的想法前言从ABC234G,想要把一个DP优化到线性,了解到了单调队列优化这种方法,在模板题上花了不少时间,感觉这是一个挺抽象的思想。对单调队列的一些感性认识从经典的滑动窗口入手,为了快速得到一段区间的最值,我们维护一个单调的双端队列。它首先具有单调性,并支持头的删除,和尾部的增加。我们规定,单调队列中的元素有这样的特点元素之间具有单调性元素下标是单调递增的(因为增加不会改变这些元素的相对位置)队列中只允许存在K个元素(K是查询区间长度,如果单调队列中元素数量超过K,一
2022-01-15 00:06:36 192
原创 Codeforces Round #758 (Div.1 + Div. 2) (BC)
Codeforces Round #758 (Div.1 + Div. 2)B构造一个特定山峰山谷数量的排列思路考虑一个严格升序的排列,如果交换两个元素,会一次产生一个或者两个山峰或者山谷,那么他们的数量差不会超过1,并且很显然的,山峰和山谷的数量和要不应该超过n-2考虑构造,要注意到对于不是首尾元素,一次会产生一个山峰一个山谷,对于首端,产生一个山谷,对于尾端,产生一个山峰那么分三种情况,如果山峰和山谷数量相当,跳过首尾端翻转就行山峰比较多,选择把尾端的翻转 ,然后向前翻转就行。山谷多
2021-12-12 19:18:52 2474
原创 C. Divan and bitwise operations
C. Divan and bitwise operations题目:给定一个数组的长度n,和m条约束,对于每条约束,给定这个数组在区间[l,r],上的OR,保证这个数组中的所有元素至少被[l,r]框选一次,现求这个数组的所有子序列(不保证连续选取)的XOR的和。思路:需要观察出两个结论。以下用二进制数进行解释一段区间上的OR如果是1,说明这一段上至少有1个1,换句话说,OR可以判是否有1存在如果一个二进制串中有1,那么它的所有异或为1的子序列选取方案一共有2n−12^{n-1}2n−1种
2021-11-29 17:13:28 1013
原创 D.X-Magic Pair
X-Magic Pair题目给(a,b)二元组,每次操作其中一个令它等于 它们差的绝对值(abs(a-b)) ,给出x,问能不能通过这个操作 ,使得a或b等于x思路首先要观察到,只有大的往小的变,才是有效的操作,因为如果往大的变,它总会在1或者2步后,变成一开始的样子(即重复)又因为大的往下的变是一个连续减去小的过程 ,把它看成一个取模的过程,在这个过程中,只要看,x是不是这个过程的因数就行。AC代码#include <bits/stdc++.h>#define yes
2021-11-27 17:02:27 825
原创 GA算法练习(代码实现py3)
GA#coding=gbkimport randomimport mathimport numpy as npimport matplotlib.pyplot as pltpopulation_size = 1000 #种群数generations = 300 # 代数 (迭代次数)chrom_length = 10 # 染色体长pc = 0.6 # 交配概率pm = 0.01 # 变异概率genetic_population = [] # 基因编码population = []
2021-11-25 17:23:15 305
原创 朴素贝叶斯预测天气
#include<iostream>#include<string>#include<cstring>using namespace std;int cnt_sun, cnt_clo,cnt_rain;// 各天气出现频数int cnt_sun2,cnt_clo2,cnt_rain2;// 各天气在某条件下出现频数double P_clo,P_rain,P_sun;// 各天气出现概率double P_clo2,P_rain2,P_sun2;// 某天气出现
2021-11-06 12:00:26 1721
原创 关于c++中形参和全局变量同名的问题简单探究
关于c++中形参和全局变量同名的问题简单探究今天突然想到如果形参和全局变量同名,会如何处理,有如下结果#include <bits/stdc++.h>#define yes puts("yes");#define inf 0x3f3f3f3f#define linf 0x3f3f3f3f3f3f3f3f#define ll long long#define ull unsigned long long#define debug(x) cout<<"> "<
2021-11-05 13:50:41 1525
原创 Codeforces Round #752 (Div. 2) (A to D)
Codeforces Round #752 (Div. 2)A题目:向一个序列中任意位置插入元素,求把一个序列变成满足对任意的元素有,ai<=ia_i<=iai<=i,的最小操作次数。思路显然往头部插入,对答案有最大的贡献,只要对所有元素操作次数取max即可###AC代码#include <bits/stdc++.h>#define yes puts("yes");#define inf 0x3f3f3f3f#define ll long long
2021-10-31 16:56:47 92
原创 A*练习..
A*练习#include <bits/stdc++.h>#define D 1000#define N 10#define INF 0x3f3f3f3f#define D2 D*sqrt(2)using namespace std;void show();struct Node{// 节点结构体 int x,y; double f,h,g;// 启发函数值。 void setH(Node e){ int dx = abs(x - e.x
2021-10-26 12:29:57 92
原创 计数类DP
计数类DP——整数划分整数划分大体上可以分为3类考虑顺序的拆分方案(即1,1,2;和2,1,1 是两种不同的方案)这种问题一般转化为完全背包即可解决。不考虑顺序的拆分方案,可以划分出空集(也就是可以有对拆分完全没贡献的东西存在(0))不考虑顺序的拆分方案,要求划分出的集合不为空集(不可以拆出0)主要讨论2,3类DP问题空集存在的情况对于n的m划分,可以定义dp[m][n] 为所求答案, 考虑任意的拆分序列ai{a_i}ai,可以分为两类1. 所有aia_iai都大于0,我们可
2021-10-22 17:37:30 322
原创 Codeforces C. Floor and Mod
C. Floor and Mod题目有a,b两个数, 给出它们的范围 计数 (floor(a/b) == a % b) 的所有有序对个数。思路对等式变形为 a=k∗b+k(b>k)a = k * b + k (b > k)a=k∗b+k(b>k),现在只需考虑等式右边,因为是k是b的模数,所以一定小于b显然k最大不可以超过sqrt(x)的,那么就可以枚举k,在b的取值范围内二分符合条件的区间即可。AC代码#include <bits/stdc++.h>#
2021-10-22 10:31:46 112
原创 2019CCPC 网络预选赛——Windows Of CCPC
Windows Of CCPCAC代码水题一道 ,可以研究研究怎么把代码更简洁一些。#include <bits/stdc++.h>#define yes puts("yes");#define inf 0x3f3f3f3f#define ll long long#define linf 0x3f3f3f3f3f3f3f3f#define debug(x) cout<<"> "<< x<<endl;#define ull unsign
2021-10-19 20:55:10 171
原创 切水题~~~
CF B题,每日一道练习思维的流畅和切题的速度10.18一道几何相关的模拟#include <bits/stdc++.h>#define yes puts("yes");#define inf 0x3f3f3f3f#define ll long long#define linf 0x3f3f3f3f3f3f3f3f#define debug(x) cout<<"> "<< x<<endl;#define ull unsigned lon
2021-10-18 22:54:45 173
原创 Codeforces Round #749 (Div. 1 + Div. 2, based on Technocup 2022 Elimination Round 1)
Codeforces Round #749 (Div. 1 + Div. 2, based on Technocup 2022 Elimination Round 1)A题目互不相同的n个数字,求它们的最大的一个子集合,使它们的和是一个合数 , 保证n>=3思路1. 除2外的质数都是一个奇数2. 一个奇数减去一个比它小的奇数,一定可以得到一个偶数n>=3 , 所以答案只有n或者n-1两种可能, 因为 质数除2都是奇数,又因为给的所有数字都是不同的且它们的总数都大于二,所以加出
2021-10-18 10:36:54 268
原创 八数码游戏练习
八数码游戏练习#include <iostream>#include <cstring>#include <string>#include <queue>#include <cstdio>#include <set>#include<time.h>#include <map>#include<conio.h>#include<algorithm>#define ll
2021-10-15 10:31:24 244
原创 Dropping tests (01分数规划)
Dropping tests题目给一个二元组,可以扔掉这个二元组的k个元素,求取扔掉后的二元组的比值最大值。思路新学的01分数规划 写写题解理理思路。想学习的参考这篇博客即可首先把这个分式化成便于数学语言表达的形式,所以引入一个辅助符号函数sgnsgnsgn,取值只有0,1.引入辅助参数r,显然rmaxr_maxrmax为答案,那就是说找到rrr的值使得这个方程成立,这个过程可以二分。以上述的核心思想,对等式进行变形,由于要删去k个元素,在引入sgnsgnsgn函数后,可以得到最后要
2021-10-07 18:08:26 205
原创 Codeforces Round #746 (Div. 2)
Codeforces Round #746 (Div. 2)AAC代码#include <bits/stdc++.h>#define yes puts("yes");#define inf 0x3f3f3f3f#define ll long long#define linf 0x3f3f3f3f3f3f3f3f#define debug(x) cout<<"> "<< x<<endl;#define ull unsigned long
2021-10-05 23:29:42 169
原创 AtCoder Beginner Contest 221(A~E)
AtCoder Beginner Contest 221A略BAC代码#include <bits/stdc++.h>#define yes puts("yes");#define inf 0x3f3f3f3f#define linf 0x3f3f3f3f3f3f3f3f#define ll long long#define ull unsigned long long#define debug(x) cout<<"> "<< x<<
2021-10-03 19:46:59 200
原创 Codeforces Round #744 (Div. 3)(A~F)
Codeforces Round #744 (Div. 3)AAC代码#include <bits/stdc++.h>#define yes puts("yes");#define inf 0x3f3f3f3f#define ll long long#define linf 0x3f3f3f3f3f3f3f3f#define debug(x) cout<<"> "<< x<<endl;#define ull unsigned long
2021-10-03 10:47:46 84
原创 Codeforces Round #744 (Div. 3)
Codeforces Round #744 (Div. 3)AAC代码#include <bits/stdc++.h>#define yes puts("yes");#define inf 0x3f3f3f3f#define ll long long#define linf 0x3f3f3f3f3f3f3f3f#define debug(x) cout<<"> "<< x<<endl;#define ull unsigned long
2021-10-01 13:28:09 193
原创 AtCoder Beginner Contest 220(A~F)
AtCoder Beginner Contest 220A题目略思路lueAC代码#include <bits/stdc++.h>#define yes puts("yes");#define inf 0x3f3f3f3f#define linf 0x3f3f3f3f3f3f3f3f#define ll long long#define ull unsigned long long#define debug(x) cout<<"> "<<
2021-09-28 08:27:25 293
原创 POJ2431 Expedition(优先队列+贪心)
Expedition题目一个人骑车跑一段路程,一分钟消耗一个单位的油,路上有一些加油站,可以加一定单位的油,问如果想跑到终点,加油的最小次数是多少。思路最优解问题,本题考虑贪心即可。贪心策略为如果无法到下一个站点在以到达的范围内优先加提供最大的加油站点。证明:n = 1 时显然是成立的,考虑前n个加油站该方案成立,现在要前往n+1个点,如果可以到达,显然不用更新答案,不可以到达,从前n个站点选择最大的未被使用的站点加油即可。这确实是一个最优解。代码实现,可以用一个优先队列维护可选站点,每次
2021-09-25 20:24:20 132
原创 HDU Eight (BFS+康拓展开)
HDU1043 Eight题目给出数字八数码游戏的一种棋局状态,求完成游戏的步骤,输出任意一种即可思路每种对弈状态可以抽象成一个19的数字排列,所以所有的可能就是19的全排列,总共是10610^6106级,因此可以穷举。考虑搜索,从初始态穷举所有状态。首先,如何搜索,如果使用BFS,显然会造成重复,并且无法通过简单的打标记方法解决。但是,我们可以通过对他们的全排列进行编号,这样就可以采用标记解决。那么,解决如何快速获取一对弈状态的全排列编号的问题。我们可以使用康拓展开,排列的编号是倒
2021-09-23 20:21:37 153
原创 CCF202012-2(前缀和+二分)
期末预测之最佳阈值题目n个学生,每个学生有一个阈值和一个结果,结果有0,1两种选择,现在可选择阈值进行判断大于阈值取1,小于取0,问预测结果正确的次数最多的阈值是谁,如果预测次数相同,输出最大的阈值。思路结果和数据输入无关可排序,且如果有序,那么显然该阈值左侧预测结果为0,右侧为1,因此可以在排序后预处理出0,和1出现的次数,之后次数就是0,1个数和。考虑到有阈值相同的情况,此时我们要的结果仅应得到第一个和他相同的阈值,可以用二分查找得到第一个相同的元素AC代码时间复杂度:O(nlog
2021-09-18 23:14:32 180
原创 CCF22-4学校外的树(dp)
学校外的树题目给出n个点,选点,有的点被标记,无法选择,求方案数。选点规则如下:除头尾外的点,在其中选择任意数量的点,这些点分隔开的小区间彼此独立在划分出的小区间中,保证等差。思路考虑n=2n=2n=2的情况,能保证等分的方案数是左右端点的差的约数即为所求。考虑n>=2n>=2n>=2的情况,考虑到求的是方案数,优先考虑动态规划。我们试着给出dpdpdp定义为前i个点的方案数,显然dp[n]dp[n]dp[n]即为所求试着找出状态转移,将一个dp[n]dp[n
2021-09-15 22:52:07 110
原创 POJ2184 cow exhibition (01背包 dp + 偏移量)
Cow Exhibition题目奶牛想证明他们是聪明而风趣的。为此,贝西筹备了一个奶牛博览会,她已经对N头奶 牛进行了面试,确定了每头奶牛的智商和情商。 贝西有权选择让哪些奶牛参加展览。由于负的智商或情商会造成负面效果,所以贝西不 希望出展奶牛的智商之和小于零,或情商之和小于零。满足这两个条件下,她希望出展奶牛 的智商与情商之和越大越好,请帮助贝西求出这个最大值思路首先可以想到开一个三维数组,处理成一个01背包,但显然时间上不允许我们这样做。因为情商智商和的这个属性比较特殊,如果我们用
2021-09-11 11:16:05 152
原创 Educational Codeforces Round 113 (Rated for Div. 2) (A-C)
A. Balanced Substring题目一个只有’a’,'b’的串,求一个子串使得 a的个数和b相等思路略AC代码#include <bits/stdc++.h>#define inf 0x3f3f3f3f#define ll long long#define linf 0x3f3f3f3f3f3f3f3f#define ull unsigned long long#define endl '\n'//#define int long longusing na
2021-09-09 23:41:05 132
原创 Educational Codeforces Round 113 (Rated for Div. 2) C. Jury Meeting(思维+数学)
C. Jury Meeting题目n个人发言,每个人都可以分一个次数,轮流发言,次数用尽就跳过,求有多少的分配排列可以使没有一个人连续发言。没有输出0.思路先考虑怎样的次数序列总不合法,对于序列最大值maxmaxmax,如果它很大显然会有人连续发言,现在找到这个“大的界限”。因为每一轮都会使发言次数减一,并且如果连续发言,此时一定只有一个次数非零的人,也就是说只要有一个人能充当“间隔” , 就不会使得人连续发言。因此考虑最大值aaa和第二大值bbb的关系。当a=ba=ba=b时,显然在
2021-09-09 23:39:20 222
原创 Space Elevator(多重背包求最大可行方案)
Space Elevator题目给n种砖,每种砖有最大高度限制mx,和数量限制x,求最大累计高度。思路这是一个完全背包求最大方案问题,可以说是求方案可行性的问题的一个子集。所以可以类比其定义dp定义dp[i][j]dp[i][j]dp[i][j]为考虑前i种物品,累加j时,第i种物品的剩余个数。状态转移,首先如果前i−1i-1i−1种已经可以拼出jjj,也即dp[i−1][j]!=−1dp[i-1][j]!=-1dp[i−1][j]!=−1。之后,如果还没有凑出j的方案,那么我们就要考
2021-09-08 11:34:22 192
原创 Codeforces Round #742 (Div. 2) D. Expression Evaluation Error(思维+模拟)
D. Expression Evaluation Error题目把一个十进制数拆成n个数,再转成十一进制,加起来,问使得这个十一进制最大的构造方案。思路通过模拟样例发现个位数字不会对答案起到任何增加作用,而越高位,增加作用越大(个位增加0,十位增加12,百位增加113−10311^3-10^3113−103······),因此可以发现这是一个贪心。由上得出贪心策略为在拆分中尽可能的保证高位不变,或者说保证拆出来的高位数字尽可能的多。首先我们要明确,拆分后不可能使某一位数字凭空增加,那么,
2021-09-07 11:03:58 133
原创 Codeforces Round #742 (Div. 2) C.Carrying Conundrum(思维奇偶讨论)
C. Carrying Conundrum题目左加法时让进位整体右移一位,给出这样算出的结果,求所有可以得到这样结果的方案数。思路考虑到这样算的话,总是奇数位只能得到上一个奇数位进位,偶数位同理,也即奇数位和偶数位是独立的可以分开考虑。对于单独的奇数位或偶数位,符合正常的加法运算法则,因此可以简单得到所有的加法组合,所以奇数位的方案乘以偶数位的即可,而又因为对于和sumsumsum不允许sum+0=sumsum+0=sumsum+0=sum的情况存在,故而还要再减2.所以,拆分一下奇偶位,
2021-09-07 11:02:17 112
原创 Codeforces Round #742 (Div. 2)
A. Domino Disaster题目往一个两行n列的网格铺1*2的砖,可以竖着或横着,给出一行砖,求另一行。思路略##AC代码#include <bits/stdc++.h>#define inf 0x3f3f3f3f#define ll long long#define linf 0x3f3f3f3f3f3f3f3f#define ull unsigned long long#define endl '\n'//#define int long longusi
2021-09-07 10:59:12 123
原创 Making the Grade (dp)
Making the Grade 题目求构造一个单调不减或者单调不增的最小花费花费:把ai=>bia_i => b_iai=>bi的花费为 ∣ai−bi∣|a_i-b_i|∣ai−bi∣.思路这是一个求构造LIS的最小花费问题,优先选择动态规划。定义:dp[i][j]dp[i][j]dp[i][j]表示考虑前iii个数,把第iii个数改为bjb_jbj的最小花费。容易推出状态转移方程为dp[i−1][j]dp[i-1][j]dp[i−1][j]的最小花费加上这
2021-09-06 18:19:03 119
原创 2021中国大学生程序设计竞赛(CCPC)- 网络选拔赛 Command Sequence(思维+hash+查找区间和为0的map优化)
Command Sequence题目给一串命令,让机器人按它走,求有多少个子命令使机器人回到原位.思路回到原位则 sumL=sumR,sumU=sumDsum_L = sum_R , sum_U=sum_DsumL=sumR,sumU=sumD.由上,本题和命令集的前缀和有关,因此,为方便处理前缀和,我们令R⇒1,L⇒−1,U⇒1e6,D⇒−1e6R ⇒ 1,L ⇒ -1,U ⇒ 1e6 , D⇒ -1e6R⇒1,L⇒−1,U⇒1e6,D⇒−1e6.(本题数据规模2e52e52e5
2021-09-05 22:52:23 242
原创 2021中国大学生程序设计竞赛(CCPC)- 网络选拔赛 Cut The Wire(思维)
Cut The Wire题目有从1开始无限长的点.每个点被线链接,保证i是偶数,i和i/2链接i是奇数,i和3*i+1链接给出n,求a链接b的线段数,保证 所有a<=n,所有b>n思路根据连接规则,显然分奇偶讨论对于偶数x,只有 n-n/2 条线满足对于奇数x,发现n每向右移动3位,满足要求的最左边点左移一位,所以可得到左边界,找出这个区间里的所有奇数就可以AC代码#include <bits/stdc++.h>#define inf 0x3f3f3f
2021-09-05 19:44:57 482
原创 Bridging signals(最长上升子序列)
Bridging signals 题目“哦,不,他们又做到了”,Waferland 芯片厂的首席设计师喊道。布线设计人员再次完全搞砸了,使连接两个功能块端口的芯片上的信号到处都是相互交叉的。在这个过程的后期阶段,重做路由的成本太高了。相反,工程师必须使用第三维来桥接信号,以免两个信号交叉。然而,桥接是一个复杂的操作,因此希望桥接尽可能少的信号。迫切需要一种计算机程序,以找到可以在硅表面上连接而不相互交叉的最大数量的信号。记住在功能块的边界处可能有数千个信号端口,这个问题对程序员提出了很多要求。你能胜任
2021-09-04 23:34:32 226
原创 Deltix Round, Summer 2021 E. Equilibrium(线段树)
E. Equilibrium题目对两个长度相同的数组的区间发起q次询问,最少多少次操作可使它们ai = bi给定操作为选择一段偶数子区间,其中第一个数组的奇数个自增一,第二个数组的偶数位自增一。思路从总体上考虑因为是选偶数区间,每次两数组的区间和的差总不变,所以询问区间的区间和一定要相等。考虑每个子区间因为a只操作奇数位,b只操作偶数位1. aL > bL 肯定无解2. 又因为虽然每次操作区间差值不变,但如果把修改区间右移一位,可以使修改后,sumb-suma将减小1,所
2021-09-04 13:24:57 102
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人