代码源每日一题div1
文章平均质量分 59
学不会数据库
wozhendeleile......
展开
-
代码源每日一题div1 质区间长度
思路:二分+线性筛+前缀和显然要求的这个最小的lenlenlen满足单调性,考虑二分求解l≤l≤r≤106l\le l\le r\le 10^6l≤l≤r≤106这个数据范围我们可以直接线性筛筛出质数,用前缀和预处理区间质数个数,即可Code:#include <bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);#define endl '原创 2022-04-14 18:03:49 · 309 阅读 · 0 评论 -
代码源每日一题div1 最大权值划分
Daimayuan Online Judge思路:dpdpdp首先我们考虑对于某个序列的其中一段例如:[7,5,4,6][7,5,4,6][7,5,4,6]这一段拆分成:[7,5,4][6][7,5,4][6][7,5,4][6]两段,那么这两种情况对于前一段的结果是不会发生变化的,那么我们放到整个序列中,其每段都一定保证着单调但满足这一条件下,一定满足权值和最大吗?显然我们可以举出反例:[1,2,3,4][1][1,2,3,4][1][1,2,3,4][1]不如:[1,2,3][4,1][1,2,3原创 2022-04-07 23:04:12 · 394 阅读 · 0 评论 -
代码源每日一题div1 Ayoub‘s function
Daimayuan Online Judge思路:思维我们从问题的反面考虑,就是要求所有的子串减去只含000的子串,那问题转化成如何让只含000的子串尽可能的少,结论是将111尽可能的均匀的分布在这个字符串中显然我们有mmm个111就会分割出m+1m+1m+1个只含000的区间,那我们只要用总的子串个数减去这些只含000的区间的子串即可一个长度为lll的字符串的子串个数为:l∗(l+1)/2l*(l+1)/2l∗(l+1)/2现在我们来证明一下这个结论,为了方便我们只考虑整除的情况,即这些111划原创 2022-04-06 20:07:05 · 207 阅读 · 0 评论 -
代码源每日一题div1 环的数量
Daimayuan Online Judge思路:状压dp根据nnn的范围,很容易判断要用状压dpdpdp,我们可以用一个二进制数来表示当前这nnn个点,哪些点被访问,例如:110011100111001表示点1,4,51,4,51,4,5被访问那么我们定义dp[i][u]dp[i][u]dp[i][u]表示经过的点的状态为iii且最后一个点为uuu的方案数,那我们考虑起点就是状态iii这个二进制数的最低位的111代表的点如何求这个起点呢?我们想到lowbitlowbitlowbit函数求的是一个二原创 2022-04-06 00:19:06 · 183 阅读 · 0 评论 -
代码源每日一题div1 体育节
Daimayuan Online Judge思路:区间dp因为可以随便安排参赛人的顺序,显然我们把数组直接排序是更优的做法定义dp[i][j]dp[i][j]dp[i][j]为区间[i,j][i,j][i,j]中最小的答案,答案即为dp[1][n]dp[1][n]dp[1][n]而一个区间[i,j][i,j][i,j]可以由区间[i+1,j][i+1,j][i+1,j]添上一个a[i]a[i]a[i]得到或者由区间[i,j−1][i,j-1][i,j−1]添上一个a[j]a[j]a[j]得到由于数原创 2022-04-06 00:18:51 · 157 阅读 · 0 评论 -
代码源每日一题div1 区间和
Daimayuan Online Judge思路:构造图+bfs告诉我们LiL_iLi到RiR_iRi连续元素的区间和,可以转换成Li−1L_i-1Li−1到RiR_iRi两点之间有条通路,那么问题转化成是否能找到一条通路从000走到nnn,bfsbfsbfs一遍即可#include <bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);原创 2022-04-06 00:18:26 · 270 阅读 · 0 评论 -
代码源每日一题div1 社交圈
Daimayuan Online Judge思路:贪心显然可以maxL[i]maxL[i]maxL[i]和maxR[i]maxR[i]maxR[i]的人重合在一起即可#include <bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);#define endl '\n'typedef long long ll;typedef pair&l原创 2022-04-05 11:21:49 · 178 阅读 · 0 评论 -
代码源每日一题div1 拆拆
Daimayuan Online Judge思路:数论+组合先不考虑正负号,先对xxx质因数分解,需要yyy个数,抽象成yyy个盒子,每个盒子自带一个111,如果没有质因子放入,其就为111例如:x=12=2∗2∗3,y=3x=12=2*2*3,y=3x=12=2∗2∗3,y=3,当我们放入结果为[1][1∗2∗2][1∗3][1][1*2*2][1*3][1][1∗2∗2][1∗3],当前贡献结果为(1,4,3)(1,4,3)(1,4,3)对于相同的质因子,其模型对应为球盒模型中:球(m)相同盒(原创 2022-04-05 11:20:18 · 171 阅读 · 0 评论 -
代码源每日一题div1 字典序最小
Daimayuan Online Judge思路:单调栈因为每个数至少出现一次,维护一个lastlastlast数组记录每个数最后一次出现的位置,在单调栈移动过程中,如果栈顶元素大于当前元素且栈顶元素之后仍会出现就将其弹出,最后存入数组倒序输出即可#include <bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);#define endl原创 2022-04-05 11:19:10 · 132 阅读 · 0 评论 -
代码源每日一题div1 平方计数
Daimayuan Online Judge思路:计数题注意到Ai≤106A_i \le 10^{6}Ai≤106,因此可以考虑用一个桶a[i]a[i]a[i]来存储数据ans=∑i=1maxai∑j=i+1maxai+1a[i]∗a[k]∗([k==j∗j−i∗i]∗[k<m])ans=\sum_{i=1}^{maxa_i} \sum_{j=i+1}^{maxa_i+1} a[i]*a[k]*([k==j*j-i*i]*[k<m])ans=∑i=1maxai∑j=i+1maxai原创 2022-04-05 11:18:04 · 140 阅读 · 0 评论 -
代码源每日一题div1 最大公约数
Daimayuan Online Judge思路:数学枚举+环上问题如果将环切成kkk段,那么有x=gcd(d1,d2,⋅⋅⋅,dk)x=gcd(d_1,d_2,···,d_k)x=gcd(d1,d2,⋅⋅⋅,dk)我们可以发现di=x∗kid_i=x*k_idi=x∗ki,因此sum=∑di=x∗∑kisum=\sum d_i=x*\sum k_isum=∑di=x∗∑ki,我们发现xxx是数组和的一个因子,由于sum≤1011sum\le10^{11}sum≤1011,计算得到它的因原创 2022-04-05 11:16:37 · 169 阅读 · 0 评论 -
代码源每日一题div1 蜗蜗的数列
Daimayuan Online Judge思路:构造+差分维护为了判断AAA,BBB是否相等,我们可以构造 C[i]=A[i]−B[i]C[i]=A[i]-B[i]C[i]=A[i]−B[i],问题转化为判断 C=0C=0C=0由于差分可以维护区间加,我们自然可以想到维护一个D[i]=C[i]−C[i−1]−C[i−2]D[i]=C[i]-C[i-1]-C[i-2]D[i]=C[i]−C[i−1]−C[i−2],其中D[1]=C[1],D[2]=C[2]−C[1]D[1]=C[1],D[2]=C[2原创 2022-04-05 11:15:15 · 211 阅读 · 0 评论 -
代码源每日一题div1 最长因子链
Daimayuan Online Judge思路:dpdpdp,类似于最长上升子序列#include <bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);typedef long long ll;typedef pair<int,int> PII;const int N=1e6+10,mod=1e9+7;int n,a[N],原创 2022-04-05 11:09:11 · 123 阅读 · 0 评论 -
代码源每日一题div1 路径计数2
Daimayuan Online Judge思路:dp+组合+dfs记忆化搜索由于本题n≤106n\le10^6n≤106,因此我们不可能用一个dp[i][i]dp[i][i]dp[i][i]去跑dp但注意到m≤103m\le 10^3m≤103,用dp[i]dp[i]dp[i]去表示(1,1)(1,1)(1,1)到第iii个障碍点不经过其他障碍的方案数通过组合数学的知识,我们可以知道(x1,y1)(x_1,y_1)(x1,y1)到(x2,y2)(x_2,y_2)(x2,y2)的方案数为C(原创 2022-04-05 11:12:33 · 170 阅读 · 0 评论 -
代码源每日一题div1 序列操作
Daimayuan Online Judge思路:离线+思维用一个last[x]=ilast[x]=ilast[x]=i数组维护第iii次操作将a[x]=ya[x]=ya[x]=y用一个b[i]b[i]b[i]数组维护第i次操作后操作2造成的此时a[i]a[i]a[i]的改变,可以从最后一次往前遍历,显然满足b[i]=max(b[i],b[i+1])b[i]=max(b[i],b[i+1])b[i]=max(b[i],b[i+1])最后第iii个数的值为:max(a[i],b[last[i]])ma原创 2022-04-05 11:11:13 · 225 阅读 · 0 评论 -
代码源每日一题div1 二分答案
Daimayuan Online Judge思路:二分答案模板题#include <bits/stdc++.h>using namespace std;#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);#define endl '\n';typedef long long ll;typedef pair<int,int> PII;const int N=5e5+10,mod=1e9+7;ll原创 2022-04-05 11:06:24 · 211 阅读 · 0 评论