思维
文章平均质量分 57
Looy_cai
愿你能够
成为优秀的人
展开
-
Football (概率dp+二进制运用)
支队伍,给出两两队伍之间比赛的胜率。问哪个队伍成为冠军的概率最大。由于此时比赛过的队伍不能重复,所以运用二进制将其按顺序比赛。第1场看其最低位不同且比最低位大的其它位相同的打比赛。第2次看其次低位不同且比最次位大的其它位相同的打比赛。(可以自己模拟一下)...原创 2022-07-28 20:14:59 · 334 阅读 · 0 评论 -
取包裹(对线段贪心 set+lower_bound)
有n件包裹,每次可以取k件。给出每件包裹入库时间和最晚取走时间。(入库当天和最晚取走当天都可以取快递)问最少几次可以将所有包裹取出。拿包裹的件数加一,若此时那确定去快递点的时间。一定要有一次把它取出来,所以每次在最小。拿满了,说明不能之后的包裹无法在此时刻。从小到大排序,遍历,每次都对最小的。),并且记录此时刻取包裹件数为1。一起取走,此时确定去快递点的时间。大于所有已存的确定去快递点的时间。小于等于确定去快递点的时间。当天取出包裹即最优。......原创 2022-07-26 23:31:34 · 354 阅读 · 3 评论 -
[NOIP2013]车站分级(思维+拓扑but想不到)
拓扑原创 2022-07-03 18:21:51 · 288 阅读 · 0 评论 -
B. Tokitsukaze and Meeting(滑动窗口+思维)
LINK题目大致翻译:现在有n×mn\times mn×m个位置,有n×mn\times mn×m个学生,每个学生为0或1,依次进入,依次进入规则如图问:每加入一个学生后,至少有一个1的行列之和。思路:对于行列的考虑分开进行:对于每列:每次加入一个学生列中的1要不就不变,要不就加1;对于每行:每次加入一个学生行的变化可能会增加可能不变可能减少,可以运用滑动窗口,记录行的变化和每次加入学生后当前行1的个数;代码:#include<bits/stdc++.h>usin原创 2022-05-14 16:37:23 · 372 阅读 · 22 评论 -
A. Tokitsukaze and Strange Inequality(思维+前缀和)
LINK题目:大致翻译:给一个数组PPP,其中a<b<c<da<b<c<da<b<c<d,求满足 Pa<PcPa<PcPa<Pc &Pb>PdPb>PdPb>Pd 的四元组数目。思路:枚举Pb,Pa随之更新,将Pa放入数组中,求其前缀和。枚举Pb,Pa随之更新,将Pa放入数组中,求其前缀和。枚举Pb,Pa随之更新,将Pa放入数组中,求其前缀和。作用:借助前缀和标记小于等于Pa的个数,即d[j]:此原创 2022-05-13 17:28:51 · 463 阅读 · 0 评论 -
Palindrome Basis(完全背包)
LINK题目:大致翻译:一个数字由数字回文串相加,问有多少种组合情况。思路:由完全背包可得:dp[i][j]:dp[i][j]:dp[i][j]:前iii个物品随意取,组成总体积为jjj的方法数。由此思路可得前iii个回文数里,相加之和为jjj的方法数。再转换为一维可得:转换公式为:dp[j]=(dp[j]+dp[j-v[i]])%mod;代码:#include <bits/stdc++.h>using namespace std;//#define ll lon原创 2022-05-05 16:48:52 · 244 阅读 · 0 评论 -
E. Preorder(dfs思维)
LINK题目Examplesinput4BAAAAAAAABBABABoutput16input2BAAoutput1input2ABAoutput2input2AABoutput2input2AAAoutput1大致翻译:给出一个n层一个完全二叉树以及它的前序遍历的结点上对应的字母,结点只能为A或B,现在可以任意翻转节点上的左右子树,形成一个新的前序遍历字符串,问字符串有多少种不同的情况。思路:将每个节点的左右子树构成的字符串按左小右大的顺序原创 2022-04-30 19:47:55 · 1053 阅读 · 0 评论 -
AC 反悔贪心,priority 难
LINK题目示例1输入9 2arakbacca输出3acacbacca翻译:给一个长度为 n 的字符串, 最多有 k 次修改字符串的机会, 每一次只能将任意一位字符修改为其他字符, 输出修改后的字符串最多有多少个"ac", 并输出字符串思路能想到这个思路就很NB!!!此题和种树有很大的关系,都用到了缩点,更难的一点是需要另开两个数组标记一下改变的位置。具体解说用一个例子稍作解释:代码:#include<bits/stdc++.h>using namespac原创 2022-04-15 21:15:57 · 549 阅读 · 0 评论 -
P1792 [国家集训队]种树(反悔贪心+priority)
LINK题目:思路:参考种树一点点区别在于:特判种不满的情况,将首尾的左右位置稍作修改,在循环时一定要种满K棵树代码:#include<bits/stdc++.h>using namespace std;#define ll long long const int N=5e5+10;const int inf=0x3f3f3f3f;struct node{ int a,pos; //priority_queue中自定义的比较函数的效果和sort()是相反的 boo原创 2022-04-14 20:34:57 · 282 阅读 · 0 评论 -
P1484 种树(反悔贪心,priority)
LINK题目:思路:反悔贪心,将所有坑都放在优先队列中。先从值最大的开始贪,在贪的时候还要记录它的左右,因为存在一种情况,如:处理左右位置不可选的坑:代码:#include<bits/stdc++.h>using namespace std;#define ll long long const int N=5e5+10;const int inf=0x3f3f3f3f;struct node{ int a,pos; //priority_queue中自定义的比原创 2022-04-14 20:14:13 · 596 阅读 · 0 评论 -
集合中的质数(容斥原理+状态压缩)
LINK题目思路:由于集合中均为素数,有:由概率加法公式(简单证明)得:即:除以奇数个素数时加;除以偶数个素数时减。代码:#include <bits/stdc++.h>using namespace std;#define ll long longconst int N=8;int a[30],n;ll m;int main() { ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n>原创 2022-04-05 17:47:25 · 476 阅读 · 0 评论 -
锁(状态压缩+思维)
LINK题目:样例示例1输入4 31 1 1 1输出6说明106号房共有4名居民,只有3人在场时才能打开门。这时共需6把锁。思路:找每一组临界组合(即:再加上剩余的任意一个居民重要度一定大于或等于k),每组临界组合所缺的钥匙必须不一样。即求临界组合的数目即所需锁的数目。原因:若存在两组不同的临界组合所缺的钥匙相同,那么这两个组合合并时重要度一定大于或等于k但是他们缺了一把钥匙无法开所有的锁,不符合题意。代码:#include <bits/stdc++.h>usi原创 2022-04-05 15:14:15 · 187 阅读 · 0 评论 -
栈和排序(思维)
LINK题目思路:先从后往前找到此时的最大值,存入数组b中然后从前往后遍历,当此时i位置的值为最大值时入栈,入栈后还需要比较此时辅助栈中的数值和下一个遍历到的位置的b[i+1]中的值的大小比较,若栈顶数值大于b[i+1]就入栈;若此时i位置的值不为最大值,就将此值存入辅助栈中。代码:#include <bits/stdc++.h>using namespace std;#define ll long longconst int N=1e6+10;stack<int原创 2022-04-04 20:04:55 · 387 阅读 · 0 评论 -
「土」巨石滚滚(有趣的一道贪心)
LINK思维转不过来题目:思路:一开始想错了一直卡着几个点。想法挺有意思的。一开始目光短浅在排序的时候:1.若回馈>=丧失,则丧失小的排在前面;2.若回馈<丧失,则(回馈-丧失)小的排在前。第一点没问题,但第二点有问题。首先举个例子反驳一下第二点:当m=10此时还剩两个障碍:3 0,9 2;按2所说此时应该先撞击3 0(0-3=-3),此后剩下7不足以撞9 2(2-9=-7);但如果先撞击回馈值大的,即9 2,此后剩下3刚好可以撞3 0,即可以全部撞击完成。所以2原创 2022-04-01 19:56:53 · 238 阅读 · 0 评论 -
P2564 [SCOI2009]生日礼物(尺取法/双指针)
LINK不得不说 双指针用法nb题目输入输出样例输入6 31 52 1 73 1 3 8输出3思路:建议看尺取法代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;//#define int long longconst int mod=1e9+7;const int N=1e6+10;int n,k,x,y,num,minn,maxx;int vis[N];struc原创 2022-03-30 01:31:49 · 196 阅读 · 0 评论 -
Serval and Rooted Tree(树形dp)
LINK题目:样例:样例解释:题意:现有一棵树(根节点为1),树上每个结点上有一个flag值(flag=0 :表示这个点的权值是所有子节点权值中的最小值;flag=1:表示这个点的权值是所有子节点权值中的最大值)。有k个叶子节点,可以给每一个叶子节点安排1——k中的值且每个值只能放置一次。问:根节点值的最大值是多少。思路:想复杂了,看了一下大神们的题解,只能说:nb哇!!!运用树形dp。dp[i]:i结点值最大时需要叶子的数量;在每个叶子节点上dp[叶子]=1(只要叶子自己原创 2022-03-20 00:16:02 · 1012 阅读 · 0 评论 -
I. Power and Zero(二进制,思维)
LINK题目样例思路:将二进制存起来,从高位向低位变成一个不下降序列,此时最低位次数即所需次数(从高位到地位,相邻进位为2)代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;//#define int long longconst int N=1e5+10;const int nn=1e6+10;const ll mod=998244353;#define eps 1e-8int原创 2022-03-19 17:27:14 · 556 阅读 · 0 评论 -
摘桃子(思维)
LINK题目思路:先将每个人拥有的桃子数量减1,再将其求出前缀和(求的同时直接modk)先将每个人拥有的桃子数量减1,再将其求出前缀和(求的同时直接mod k)先将每个人拥有的桃子数量减1,再将其求出前缀和(求的同时直接modk)这样就可以将连续x个人的桃子数之和modk等于人数转换为求前缀和数组相同数字时的组合情况,(1.注意:此时的长度不能超过k,由题意可得,桃子和mod的值一定小于k这样就可以将连续x个人的桃子数之和mod k等于人数转换为求前缀和数组相同数字时的组合情况,(1.注意:此时的原创 2022-03-06 18:18:29 · 236 阅读 · 1 评论 -
D. Infinite Set(dp+二进制)
LINK题目:样例&说明:大致翻译:给出nnn个不同数和ppp(集合SSS中所有元素均小于2p2^p2p),维护集合SSS,该集合里的元素xxx满足:1.x=ai1. x=a_i1.x=ai2.x=2y+1,y∈S2.x=2y+1,y \in S2.x=2y+1,y∈S3.x=4y,y∈S3.x=4y,y \in S3.x=4y,y∈S问集合S中满足条件的数有多少。思路:由于1<=p<=2∗1051<=p<=2*10^51<=p<=2∗1原创 2022-02-23 16:35:48 · 788 阅读 · 0 评论 -
口算训练(思维)
传送门题目:Sample Input15 46 4 7 2 51 2 241 3 182 5 173 5 35Sample OutputYesNoNoYes分析:直接暴力TLE……需要换一种思路!在10510^5105中质因数组成的个数不会很多,所以可以将质数定为下标,通过对a[i]分解质因数x,若a[i]里质数x有num个则将下标i存入x里,且存num个i;通过二分查询对应下标看个数是否够即可判断;代码:#include<bits/stdc++.h>原创 2021-10-30 21:32:02 · 203 阅读 · 0 评论 -
Mio visits ACGN Exhibition(dp,思维)
传送门题目:示例1输入2 2 1 10 01 1输出2示例2输入3 3 2 00 0 10 0 11 0 0输出6思路:(借鉴大哥的)优化过后dp[i][j][k]代表含义:优化过后dp[i][j][k]代表含义:优化过后dp[i][j][k]代表含义:i=1:当前行;i=0:上一行;j:当前列;k:0的个数i=1:当前行; i=0:上一行; j:当前列;k:0的个数i=1:当前行;i=0:上一行;j:当前列;k:0的个数dp[0][j][k]:上一行第j列原创 2021-10-25 09:42:11 · 272 阅读 · 0 评论 -
D:Character Distance(思维,找规律)
链接输入44 31 2 1 24 41 1 2 26 33 3 2 2 1 17 31 1 2 2 2 3 3输出1 2 2 1-11 1 2 3 3 21 1 2 3 2 2 3呜呜呜呜……赛时读假了一点,注意如果有1个出现的直接输出排序结果即可;太难受了,赛时思路是对的没有错哭了,思路等平复补……#include <bits/stdc++.h>using namespace std;const int N=1e6+10;typedef long l原创 2021-10-24 18:04:16 · 340 阅读 · 0 评论 -
The Number of Imposters(扩展域并查集)
传送门题目:Exampleinput53 21 2 imposter2 3 crewmate5 41 3 crewmate2 5 crewmate2 4 imposter3 4 imposter2 21 2 imposter2 1 crewmate3 51 2 imposter1 2 imposter3 2 crewmate3 2 crewmate1 3 imposter5 0output24-125考点:扩展域并查集,可以将i+n与i分为不同的原创 2021-10-18 21:42:59 · 239 阅读 · 0 评论 -
Nun Heh Heh Aaaaaaaaaaa(dp+思维+数学)
传送门题目:Sample Input2nunhehhehahaahahahahahahaahaahahahahhanunhehhehhehhahaahahahaahaahahaaaahaaSample Output1145141919810大致翻译:简略题意:寻找前缀为nunhehhehnunhehhehnunhehheh,后面至少有一个aaa的字串,问有多少种组合情况;根据枚举推到可以发现aaa的组合情况:当aaa有111个时,组合:111种;当aaa有222个时,组合:33原创 2021-10-10 23:52:11 · 493 阅读 · 0 评论 -
Portal(dp,思维好题)
传送门题目:Examplesinput15 410000000011000000001output12input19 9001010001101110100000010011100000001101010101110001111000001111111100000000110000output5NoteIn the first test case, the final portal is like this:1110100110011001原创 2021-10-07 20:06:37 · 130 阅读 · 0 评论 -
Bakry and Partitioning(树、xor理解、dfs、思维)
传送门题目:Exampleinput52 21 31 25 53 3 3 3 31 22 31 44 55 21 7 2 3 51 22 31 44 55 31 6 4 1 21 22 31 44 53 31 7 41 22 3outputNOYESNOYESNO大致题意:给出包含nnn个节点n−1n-1n−1条边的一棵树,每个节点有对应的点权,给出kkk,要求删除至少一条边,至多k−1k-1k−1条边,若存在某种方案,使删边原创 2021-10-05 18:44:18 · 163 阅读 · 0 评论 -
Swaps(思维)
传送门题目:Exampleinput323 14 235 3 12 4 657 5 9 1 32 4 6 10 8output023大致题意:思路:利用奇数偶数的区别,将两数组数据与对应位置记录下来并对数组里的数进行排序,接下来从小开始遍历求最小的交换方法#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+10;int a[N],b[N原创 2021-10-05 18:25:36 · 134 阅读 · 0 评论 -
D. The Strongest Build(STL、思维)
传送门Examplesinput33 1 2 32 1 53 2 4 623 2 33 2 2output2 2 3input33 1 2 32 1 53 2 4 623 2 32 2 3output1 2 3input33 1 2 32 1 53 2 4 623 2 32 2 3output3 2 2input41 101 41 71 30output1 1 1 1大致翻译:大致题意:给定数组个数n,输出每组数据的个数和原创 2021-10-05 18:25:18 · 151 阅读 · 3 评论 -
Product 1 Modulo N(裴蜀定理、简化剩余系?)
传送门题目:大意:输入一个数n,求[1……n−1][1……n-1][1……n−1]范围内最长的字串满足字串的乘积对n取模为1思路:代码:#include <bits/stdc++.h>#include<unordered_map>using namespace std;typedef long long ll;//#define int long longconst int N=1e5+10;const ll mod=1e9+7;const int in原创 2021-09-17 19:44:40 · 193 阅读 · 0 评论 -
P5629 【AFOI-19】区间与除法(ST,unordered_map,unique,思维,mp.find(j)!=mp.end()比mp[j]快)
传送门题目:输入输出样例输入 #12 3 3 30 206 6 61 12 21 2输出 #1011输入 #26 3 3 36 5 10 15 19 72 5 101 61 44 6输出 #2332思路:听说unordered_map的查找速度比map快mp.find(j)!=mp.end()这里换mp[j]!=0会TLE代码:#include <bits/stdc++.h>#include<unordered_map>原创 2021-09-13 17:23:19 · 369 阅读 · 0 评论 -
P7167 [eJOI 2020 Day1] Fountain(st、倍增(思维?)
传送门题目:思路:做一个下一个流到哪的表和总容量表代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//#define int long longconst int N=1e5+10;const int inf=0x3f3f3f3f;const double pi=acos(-1);const double eps=1e-10;//ne[i][j]:第j个盘溢出i+1次流到的位置/原创 2021-09-11 20:53:34 · 236 阅读 · 0 评论 -
Air Conditioners(思维)
传送门题目:Exampleinput56 22 514 1610 17305 53 1 4 2 53 1 4 2 57 1110000000006 36 1 35 5 5output15 14 15 16 16 1736 35 34 33 32 31 30 31 32 331 2 3 4 51000000000 1000000001 1000000002 1000000003 1000000004 1000000005 10000000065 6 5 6原创 2021-09-08 10:47:45 · 147 阅读 · 0 评论 -
A. Exciting Bets(gcd之更相减损法)
思路:由更相减损法求gcd可知∣a−b∣\vert a-b \vert∣a−b∣即为a、b的最大公约数更相减损法方法如下:因为a和b同时加一或减一所以它们的差值不变,若要使得它们的gcd最大;最小次数即让a,b变为∣a−b∣\vert a-b \vert∣a−b∣的倍数即可#include <bits/stdc++.h>using namespace std;typedef long long ll;int main(){ int t; cin>>t; w原创 2021-09-06 09:25:40 · 160 阅读 · 0 评论 -
简单计数(构造矩阵 矩阵快速幂优化dp)
传送门示例1输入1 1输出0分析:代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N=2;const ll mod=998244353;struct jz{ ll a[N][N]; void init(int x){ memset(a,0,sizeof(a)); for(int i=0;i<N;i++) a[i][i]=x;原创 2021-08-15 12:29:44 · 93 阅读 · 0 评论 -
Matrix Power Series(矩阵快速幂,二分法/构造矩阵套矩阵)
传送门题意:思路:方法一:(二分)分析:奇偶分类讨论:1.代码:#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <stdlib.h>#include <math.h>#include <ctype.h>#include <queue>#include <map>原创 2021-08-15 09:28:36 · 253 阅读 · 1 评论 -
可乐(邻接矩阵+qpower 思维)
P5789 [TJOI2017]可乐(数据加强版)输入3 21 22 32输出8分析:(通过此题可以进一步了解邻接矩阵相乘的意义)难点1:邻接矩阵相乘有什么意义?意义:a[i][j]a[i][j]a[i][j]: 可乐机器人从iii到jjj的方案个数则 a[i][j]=∑k=0n(a[i][k]∗a[k][j])a[i][j]=\sum_{k=0}^n(a[i][k]*a[k][j])a[i][j]=∑k=0n(a[i][k]∗a[k][j])表示可乐机器人从iii到kk原创 2021-08-12 14:14:58 · 357 阅读 · 0 评论 -
牛客多校8:Yet Another Problem About Pi(理解、思维(1、、贪心思想))
传送门题目:示例1输入25 51.5 1.5输出48大致翻译:给出每个区域的长和宽,求长度为π\piπ的线(形状任意只要是相连的就可以)最多可以经过几个区域。分析:首先要知道沿着斜线或者边走,可以将区域所划分的先看成无限细,把pi拿出一点点(0.000000……0001)到它旁边的格子就满足线到区域里如图:线的起始位置:在四个区域的交叉位置为最优,因为此时它可以经过四个区域;(4)此时这根线主要有两种走法:(宽<=长)1.沿着区域的宽(直线)走,每经过一条宽即经原创 2021-08-10 19:44:34 · 127 阅读 · 0 评论 -
牛客多校8OR(位运算 或 和)
传送门题目示例1输入47 5 57 9 5输出2大致题意:给出b,c数组的2–n位置上的数据,构造a数组使得:(2≤i≤n)(2 \leq i \leq n)(2≤i≤n) bi=ai−1or ai,ci=ai−1+aib_i = a_{i-1} \text{or} \, a_{i} , c_i = a_{i-1} + a_{i}bi=ai−1orai,ci=ai−1+ai成立问可以构造几个满足条件的a数组。样例中的两个a数组分别为2,5,4,12,5,4,12,5原创 2021-08-10 11:07:54 · 302 阅读 · 0 评论 -
牛客1 G_Game of Swapping Numbers(思维好题)
传送门题目:示例1输入3 21 2 33 2 1输出4示例2输入3 21 2 31 2 3输出4示例3输入3 11 2 33 2 1输出4大致题意:思路:找a[ ],b[ ]之间的联系:1:绝对值好烦,得想个办法去掉!由于加了绝对值所以将a[i]与b[i]之间较大的值放入a中较小的值放入b中就可以去掉绝对值符号,计算变成求sum(ai-bi)(1<=i<=n),ans+=(a[i]-b[i]);2:可以进行k次的交换,怎么交换可以实现最原创 2021-08-07 18:52:30 · 115 阅读 · 0 评论 -
魔怔(欧拉回路+并查集)
传送门题目:首先理解题意:一开始蒙了都不知道样例给出的数据都是哪两个点之间的连线情况……以样例中第一组为例:0:代表2与1(0)之间的连线;1 1:分别代表3与1(1)、3与2(1)之间的连线;1 1 0:分别代表4与1(1)、4与2(1)、4与3(0)之间的连线;1 1 0 0:分别代表5与1(1)、5与2(1)、5与3(0)、5与4(0)之间的连线;下面用一张图模拟一下样例中第一组数据的图:思路:这里的思考涉及了欧拉回路的知识,可以自行了解一下!欧拉回路的思想是解决这题的前原创 2021-08-05 17:13:21 · 124 阅读 · 0 评论