思维
丶沙鸥
这个作者很懒,什么都没留下…
展开
-
牛客小白月赛39 G-冷静 线性筛最小质因子+树状数组
原题链接题意:中文题面,q次查询,每次查询给出n,q,求1-n中可以写成都是大于等于k的质数的乘积的形式的数的个数,即将一个数写成质因子相乘的局面时最小质因子大于等于k,如10 = 25,20 = 225,30 = 23*5。思路:线性筛预处理所有数的最小质因子,只要将标记操作时赋值1改为赋值pri[i]就可以了,然后给所有查询按照n升序排序,离线处理插入树状数组查询。#include<bits/stdc++.h>#define LL long long#define INF IN原创 2021-10-27 10:52:57 · 193 阅读 · 0 评论 -
2021CCPC网络赛重赛 _ 1011 _ HDU7136 _ Jumping Monkey 并查集,重建树
原题链接转载博客写的很好了,这里只做记录:D贴个代码#include<bits/stdc++.h>#define LL long long#define INF INT64_MAX#define MOD 998244353#define ls rt << 1#define rs rt << 1 | 1using namespace std;typedef pair<int,int>pa;const int N = 1e5+7;int原创 2021-10-14 20:14:51 · 129 阅读 · 0 评论 -
Codeforces Round #674 (Div. 3) F.Number of Subsequences 简单线性dp
原题链接题意:给一个长度为n的由a,b,c,?组成的字符串,?代表任意填abc,问所有情况产生的字符串中有多少个abc子序列。思路:经典递推dp,特殊的地方在于?的处理上,当?取a的时候应该加的值不是1,设当前下标前出现过的?次数为x,当前位置出现a的时候加的值是3^x,再把?取bc的情况传递一下就ok了#include<bits/stdc++.h>#define LL long long#define INF INT64_MAX#define MOD 1000000007#d原创 2021-10-13 17:50:57 · 90 阅读 · 0 评论 -
2021CCPC网络赛重赛 _ 1005 _ HDU7130 _ Monopoly 正负数同余性质,细节题
原题链接题意:有1-n个节点,从0出发,每次只能往右走一个节点,n的下一步会回到1节点,每走到一个节点获得ai(-1e9-1e9)点分数,m次查询,每次查询最少走多少步分数可以到达x。思路:令从1-n走完一轮的总分数为sum根据每个点的前缀和对sum取余得到的值分组,然后每次查询二分查找x对sum取余同余的那组最优的节点,没有则说明没有合法点思路不难想,赛中一开始想歪了,后面纠正回来的时候没多少时间了,在写法上一直在犹豫,最后成功把自己送走。#include<bits/stdc++.h&原创 2021-10-11 16:29:44 · 217 阅读 · 0 评论 -
2018 ICPC 青岛站 F-Tournament zoj-4063
原题链接题意:n个骑士要进行m轮对决,每一轮每个骑士都要有一个对手。而且每个对手只能打一次。假设a与b打了,c与d打了,那么后面的任意一轮如果a与c打了,那么b就必须和d打,问是否存在方案,存在就输出字典序最小的一组,否则输出Impossible思路:构造,将骑士分成2幂次组,然后在组内循环,看到其他题解都只是说了用lowbit(n)来判断是否合法,但并没有说原因的,我在这里补充一下吧,lowbit取的是2进制最低位,减一得到的就是二进制最右端的连续0转化成1,正好对应了2幂次分组的幂次和。最容易原创 2021-10-07 17:05:56 · 341 阅读 · 0 评论 -
Codeforces Round #724 (Div. 2) D - Omkar and Medians 树状数组+离散化
原题链接题意:已知一个数组a和数组b,bi是a数组中前i个元素的中位数,现在给定b数组,判断是否可以求出a数组思路:假设第b[i]前都满足,那么说明此时b[i]就是a数组中的中位数,现在插入b[i+1]会出现两种情况。1.如果b[i+1]和b[i]之间没有出现过数,那么只要插入一个b[i+1]再根据大小关系插入一个+inf或者-inf就行了2.如果b[i+1]和b[i]之间出现过数,那么仅插入两个数最多只能使中位数移动一位,并不能移到b[i+1]身上,所以这种情况是不行的。所以直接树状数组查询中原创 2021-10-02 15:32:12 · 86 阅读 · 0 评论 -
Codeforces Round #541 (Div. 2) 1131D. Gourmet choice 头铁大模拟(std拓扑排序+并查集
原题链接题意:有个厨师吃了2天,每天吃m道菜,然后给每道菜打分,给出一个n*m的字符矩阵,s[i][j]表示第一天的第i道菜和第二天的第j道菜的评分的大小关系,求这两天吃的菜的评分。思路:按>和=数量排序,先给最大的赋值1e4,每次取两个字符串对比,讨论一下各种组合情况,判掉不合法情况,求出第一天的评分,再根据每一列的符号求出第二天的评分。这时候求出来的只是相对大小,还要把所有的值在数轴上往左移,把最小的数移到1就可以了,细节比较多,很锻炼码力。改到wa9的时候搜了一下题解,看到tag是拓扑原创 2021-09-10 10:53:09 · 152 阅读 · 0 评论 -
Codeforces Global Round 15 1552D. Array Differentiation 思维好题 场景转换(建边/dp)
原题链接题意:给出n个数a1…an,问能否找到n个数b1…bn使得任意一个ai可以由b数组中两个数相减得到。思路:很容易发现x+1个bi是可以随意构造出x个ai的,一个b0=0,其他bi=bi-1 + a[i] 就可以了,所以只要这x+1个bi中还可以构造出一个其他ai就是可行的。现在的问题就变成了是否存在一段ai的和等于另一段没有重复元素的ai的和,如图所示,有一个像这样环就是可以的。这是dfs写的,还有一种写法是用三进制枚举,=每一个ai是加还是减或者跳过,然后看有没有sum==0的情况,原创 2021-09-08 15:19:12 · 245 阅读 · 3 评论 -
Codeforces Round #643 (Div. 2) 1355E. Restorer Distance 三分
原题链接题意:n堆由相同砖块堆成的堆,有三种操作:1.在第i堆放一块转,花费a。2.在第i堆拿走一块转,花费r。3.把第i堆的砖拿到第j堆,花费m。求使得所有堆高度相同的最小化费。思路:先增后减的函数曲线,三分高度算花费。#include<bits/stdc++.h>#define LL long long#define INF INT64_MAX#define MOD 998244353#define ls rt << 1#define rs rt &l原创 2021-09-03 15:56:55 · 151 阅读 · 0 评论 -
Codeforces Round #697 (Div. 3) G. Strange Beauty 线性筛变形思维
原题链接题意:n个数,问删除多少个数之后剩下的数组中的数满足:对于任意一对i,j满足ai%aj==0 || aj%ai ==0。思路:题目给的ai只有2e5,很容易想到从ai入手,算出如果当前这个ai是留下来的数中最大的数时,有多少数不用被删除。先计算每个数出现的次数,然后给原数组排序去重,遍历出现过的数的倍数,然后取最大值就可以了,注意每一组都是独立的,所以是分别计算取最大值,不是累加。#include<stdio.h>#include<algorithm>#i原创 2021-09-01 21:57:25 · 149 阅读 · 0 评论 -
牛客小白月赛37 I-加减 二分/双指针+前缀和
原题链接题意:小红拿到了一个长度为n的数组。她每次操作可以让某个数加 1 或者某个数减 1 。小红最多能进行k次操作。她希望操作结束后,该数组出现次数最多的元素次数尽可能多。你能求出这个最大的次数吗?思路:固定ai让左右的数往ai靠,然后二分区间长度或者双指针遍历区间,前缀和O1算区间贡献,不错的思维题。二分#include<bits/stdc++.h>#define LL long long#define INF INT64_MAX#define MOD 99824435原创 2021-08-31 11:12:22 · 6840 阅读 · 4 评论