- 博客(250)
- 收藏
- 关注
原创 一些简化代码的小技巧
tips 本文专门用于介绍一些非常好用的函数和操作,学习一个是一个。可以使得比赛的时候大大简化工作量。 计算二进制中的1的个数 __builtin_popcount(x) 计算gcd __gcd(x,y) 计算全排列 next_permutation(a,a+n) ...
2019-04-28 19:20:11
395
原创 protobuf边遍历边删除迭代器
我们经常遇见一边遍历,一边删除的情况。这种删除,很容易引起迭代器失效,进而引起bug. 而protobuf提供了连续容器删除的时候,erase返回下一个元素的迭代器 可以参考以下写法 for (auto iter = list.begin();iter!=list.end();){ if(){ iter = list.erase(iter); } else{ iter++; } } ...
2021-10-18 16:19:10
2183
原创 codeforces 1521C Nastia and a Hidden Permutation
题目大意 交互题,有一个1~n的排列,有两种询问方式 q1:t=1: max(min(x,pi),min(x+1,pj)); q2:t=2: min(max(x,pi),max(x+1,pj)); 其中 x的取值范围在1~x-1 要求在 ⌊32n⌋+30\lfloor \frac{3}{2}n \rfloor+30⌊23n⌋+30 的次数内查询得到结论 思路分析 由Q1可知 ,当x = INF的时候,max(min(inf,pi),min(inf,pj)) = min(pi,pj) 由Q2可知,当x= 0
2021-05-16 15:45:26
332
原创 LRU算法的实现2【数据结构】
理论上不能算是最好的算法,但是这个方法也可以。 #include <bits/stdc++.h> using namespace std; template <typename K,typename V> class LRU{ private: unordered_map<K,pair<V,int> > keyTable; map<int,K> timeTable; int nowTime=0; public: void insert
2020-06-06 15:14:33
339
原创 Unity 出现 Instantiate 时 会卡死的现象
原因是我实例化的物体上面挂了一个脚本 这个脚本上会实例化一个带有空脚本的物体。把物体上面的 空脚本摘掉就好了。
2020-03-25 11:10:33
1543
1
原创 【unity3d】 EasyTouch摇杆控制人物,获取人物移动速度
//获取摇杆的速度 private ETCJoystick joystick;//虚拟摇杆 public float speed; private string name; void Start() { joystick = GetComponent<ETCJoystick>(); speed = joystick.tm...
2020-02-23 10:08:50
1370
原创 codeforces 1242B 0-1 MST 【图论+并查集】
题目分析 要求最小生成树,如果考虑有0 边相连的点作为一个集合的话,那么就是求集合的个数 那么我们怎么统计 有 0边相邻的点呢? 很显然不能再原图上直接暴力跑。因为随着n的增大,补图会非常大。 但是我们用并查集维护集合的个数 那么我们考虑一个点u ,遍历与u相邻的所有小于u的点,统计u与这个点所在的集合相连的数量 比如 1,2,3 是一个集合 6 与1,2,相连,那么1,2,3 这个集合的数量为3...
2019-11-07 17:08:34
880
原创 【高性能计算】 mobaXtern的使用
下载完之后 session 这里新建一个连接,输入ip地址,用户名,密码就可以连接上了 连接之后,就进入一个linux的操作界面 进入一个目标文件夹下,所有的工作都将在这个文件夹中进行 我们先新建一个hello.c的文件,随便写一个hello world的文件。 #include <stdio.h> #include "mpi.h" int main( int argc, char...
2019-11-07 09:38:37
2226
原创 codeforces 686D树的重心
题目分析 要求树以及树的重心 性质 重心 子树个数 *2 ≥\ge≥ 所有个数 代码详解 #include <bits/stdc++.h> using namespace std; const int maxn = 3e5+50; vector<int>G[maxn]; int ans[maxn]; int sz[maxn]; int fa[maxn]; void dfs(...
2019-11-06 17:59:01
300
原创 bzoj4299 Codechef FRBSUM【主席树】
题目分析 当我们考虑如果能够 组成 [0,x]的所有的数,那么这些数都能扩展区间,因此,我们考虑每次统计 小于 x的所有数的和,和就是当前能够扩展的区间,然后再统计小于和的所有值的和,不断倍增就可以了。 所以用一个主席树维护一下 复杂度是 O(nlognlogn)O(nlognlogn)O(nlognlogn) 代码详解 #include <bits/stdc++.h> using n...
2019-11-05 21:04:49
220
原创 codeforces 185B Mushroom Scientists【不等式的应用】
题目分析 xa∗yb∗zc=aa∗bb∗cc∗(xa)a∗(yb)b∗(zc)cx^a*y^b*z^c =a^a*b^b*c^c*(\frac{x}{a})^a *(\frac{y}{b})^b*(\frac{z}{c})^cxa∗yb∗zc=aa∗bb∗cc∗(ax)a∗(by)b∗(cz)c ≤aa∗bb∗cc∗(a∗xa+b∗xb+c∗xca+b+c)(a+b+c)\le a^a*b^...
2019-11-05 17:20:47
275
原创 codeforces 257D sum 【思维】
题目分析 考虑 0≤a[i+1]−a[i]≤a[i]0 \le a[i+1]- a[i] \le a[i]0≤a[i+1]−a[i]≤a[i] 所以本题倒过来考虑 我们发现,考虑每一个 i, 如果 a[i+1] 的范围在 (a[i],a[i]*2)的范围内的话,那么 我令 x= a[i+1]-a[i] x的范围就会在 (0,a[i])之间 所以对于每一个位置i,我们一定可以令后面的数的范围 ...
2019-11-05 15:34:10
190
原创 codeforces 234F Fence[dp]
题目分析 dp[i][j][0] 表示 前i个物品中有 j 个红色的 且第i个物品是 绿色的最小价值 dp[i][j][1] 表示 前i个物品中有 j 个红色的 且第i个物品是 红色的最小价值 dp[i][j][0]=min(dp[i−1][j][0],dp[i−1][j][1]+min(h[i−1],h[i]))dp[i][j][0] = min( dp[i-1][j][0],dp[i-1][j...
2019-11-05 14:37:42
239
原创 codeforces 1238D 【思维】
题目分析 正难则反 考虑不是GOOD string的情况,只有 ABB…BBB BAA…AAA AAA…AAB BBB…BBA 然后 用 n*(n-1)/2 减去不满足的情况就可以啦 代码详情 #include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { int n; cin>...
2019-11-05 13:40:09
296
原创 Dropping tests 【算法竞赛进阶指南 0x3B 16】【0/1分数规划】【二分】
题目大意 给出n个 ai ,bi对 最多删去其中k对 使得 Σai/Σ bi 最大 题目分析 考虑二分。因为解的存在具有单调性。 所以二分答案 把小于0的结果放在优先队列里面,如果个数大于k 就弹出最大的k个即可 代码详解 #include <bits/stdc++.h> #define eps 1e-6 using namespace std; typedef long long l...
2019-10-29 14:59:23
251
原创 codeforces 1252K Addition Robot【线段树+矩阵乘法】
题目大意 给你一个串 包含AB两种元素,进行以下两种操作 1、给定一个区间[l,r][l,r][l,r] 将 A 变成 B,B 变成 A 2、给定一个查询区间 [l,r][l,r][l,r] 以及 两个数 x,y 在区间 [l,r][l,r][l,r]中如果 s[i]=As[i] =As[i]=A 那么 x = x+y 否则 y=x+y 查询这个区间最后的x,y分别是多少 题目分析 刚拿到这个...
2019-10-28 18:36:58
587
原创 codeforces1251E2 Voting【优先队列+思维】
题目大意 给出 nnn 个人,每个人两个值 m[i]m[i]m[i], p[i]p[i]p[i] ,p[i]p[i]p[i] 表示 收买这个人给你投票需要的花费 ,m[i]m[i]m[i]表示,如果已经有m[i]m[i]m[i]个人给你投票, 第iii个人就会免费给你投票。 题目思考 这个题是一个比较强的思维题。 首先我们一定可以知道以下几个关系: 1、如果我能够让第i个人免费给我投票的话,那么 ...
2019-10-25 15:36:13
474
原创 牛客练习赛53 德育分博弈政治课 【网络流】
题目大意 给出n个只有六个面的骰子 每个面由1~9 中的数字组成 每个面的数字不同 给出q次询问 每次给出一个串, 要求用n个骰子摆出串的形状 题目分析 因为每个骰子只能表示一个面 类似一个由限制的问题 考虑网络流中的一个点 如果它的进入的流量为1 就能限制它在与它相连的点中只选择一个。 那么我们考虑建这样一个图 每个数字到汇点的权值应该是查询串中这个数字出现的次数 然后,只要我们能跑一个满流...
2019-10-12 23:14:56
386
2
原创 牛客练习赛53 富豪凯匹配串【bitset】
题目大意 给你一些01串 (1000个串,串长1000) 然后给你q(3000)个询问 ,每个询问给一串 ,如1__0__ 由1,0,_ 组成,_ 表示可以匹配0或者1 题目分析 这个题显然不能暴力匹配 由于符号只有0和1 所以我们可以发现 如果我们要匹配1 1&1 = 1 如果我们要匹配0 1&0 = 0 如果我们要匹配_ 0&1 = 0 ,0&0 =0 因此,我...
2019-10-12 17:55:51
255
原创 牛客练习赛53 老瞎眼 pk 小鲜肉[思维+离线+线段树]
题目大意 给定一个序列,q个查询 查询(l,r)内 异或值=0 的最小区间 题目分析 考虑对序列求一个前缀异或和 那么 每个点找到与自己相同的最近的点的位置,就是每个点作为右端点 =0 的最小区间。 所有的查询区间按照右端点排序 然后我们枚举1,n所有点,在线段树 该店对应左端点的位置插入这个区间长度。 对于所有右端点为i的询问 查询(l,r)区间内的最小值即可 代码详解 #include &l...
2019-10-12 17:28:57
378
原创 2018 icpc Beijing Regional H 【dp+ac自动机】
题目大意 给定一个串,长度为m, 询问存在多少长度为n的串,使得与长度m的串对应位置匹配最多只有一个字符不相同的方案数 题目分析 如果我们考虑串进行匹配的化,很难去重 因此我们反过来考虑 考虑匹配不上的情况 那么要匹配的串只有m+1个,所以我们只要考虑当前串的一个后缀是否是m+1个串的前缀即可。 然后通过后缀进行转移 f[i][j] 表示 前i项的后缀为状态j的时候的方案数 那么对于第i+1项,...
2019-09-19 11:30:53
338
原创 2018 ICPC焦作 F 【模拟+bfs】
#include <bits/stdc++.h> using namespace std; char s[4005][6105]; typedef pair<int,int> PII; map<PII,int>mp; int tot=0; int M,N; const int maxn = 2e6+50; const int inf = 0x3f3f3f3f; ...
2019-09-17 14:15:57
314
原创 2018 ICPC 焦作 E [大数+ 数论]
熟悉一下大数的板子 import java.util.Scanner; import java.math.*; public class Main { public static int [] prime = new int [5001]; public static int [] isprime = new int [5001]; public static int tot = 0; ...
2019-09-17 14:10:32
376
原创 2017ACM ICPC Asia Regional-Daejeon H-Rock Paper Scissors[ FFT]
题目大意 给你两个字符串,N,M |N|>|M|,经过转换之后,问你,连续的一段,能够匹配上的最大元素个数。 n <1e5 题目分析 题目求区间内匹配数最大。考虑区间有n^2个,暴力做显然会T,所以这里考虑,用FFT 将第二个串反置,这样我们相邻位置的匹配,可以转化为,对应位置的匹配 如下图: 此时我们发现,最大匹配数 就是 i+j的系数 因此,我们分别求R,S,P的匹配,三次FF...
2019-08-31 10:45:03
476
原创 gym 101667 A -Broadcast Stations【树形dp】
A 树形dp 题目大意: 一棵5e3的树,可以选择一些点,放上基站,如果u上的基站价值为d,那么距离u小于等于d的点都会被覆盖,问使得整棵树被覆盖需要的最小价值。 题目分析 设 f[u][i]f[u][i]f[u][i] 表示从 u这个点 ,向外最多能覆盖 到距离为i的点,且他的子树都被覆盖的最小价值。 那么我们考虑 f[u][i]f[u][i]f[u][i] 可能是在u这个点建立了一个价值为i的...
2019-08-22 13:13:46
406
2
原创 day 1- 2018-benelux-algorithm-programming-contest-bapc-18
A- A Prize No One Can Win 题目大意 给一个序列,每个数表示物品的价值,要求选择一些数,使得任意两个物品的价格不能严格大于W 分析思考 必然是最大的两个相加不大于w 即可。 但是这个题的特殊情况就是:考虑所有物品都大于W B-Birthday Boy 题目大意 给你一些日期,表示同事的生日。要找到一个日期。离上一次同事过生日最久 分析思考 这是一个需要细心的模拟题。 那么计...
2019-07-20 00:32:31
550
原创 P1966 火柴排队【逆序对】
洛谷P1966 题目大意 给两个序列 ai,bia_i,b_iai,bi ,可以交换相邻两数,要求满足 ∑i=1n(ai−bi)2\sum_{i=1}^{n} (a_i-b_i)^2∑i=1n(ai−bi)2 最小 ,求最少的交换次数 题目分析 ∑i=1n(ai−bi)2\sum_{i=1}^{n} (a_i-b_i)^2∑i=1n(ai−bi)2 最小 只需满足,大的和大的配对,...
2019-07-08 11:22:08
220
原创 388C Fox and Card Game【贪心+对称】
题目大意: 两个人轮流从若干堆牌中取数,A只能从上往下取,B只能从下往上取。 A先取 两人都想自己的数之和尽可能大。 问两个人的数字大概有多少。 分析: 因为对称性。两个人如果有一个人想放弃自己这一边的一个数,而去取另一边的数的话,对手一定可以先取走这个数,所以不存在这种情况。 每个人都只能取自己这半边的数。 对于所有中间的数,应该是从大到小轮流取。 代码: #include <bits/s...
2019-06-20 22:28:48
299
原创 【操作系统】作业调度
采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRRN)的调度算法 #include <bits/stdc++.h> using namespace std; const int maxn = 1e5+50; struct JCB { string name; int subtime; int runtime; int resour...
2019-05-08 09:24:44
1675
原创 【操作系统】进程调度
两种调度方式 优先权法 时间片轮转法 #include <bits/stdc++.h> using namespace std; int n; struct node { int cpu; int priority; int idx=0; bool operator<(const node &oth)const { ...
2019-05-07 13:49:45
235
原创 Frequent values UVA - 11235【RMQ 区间最大值】
稍微转化一下,将若干个相同的数合并成一个区间,权值为数的个数,构成一个新的数据 将这些数据求区间最值就可以了。 #include <bits/stdc++.h> #define cl(a) memset(a,0,sizeof(a)) #define sc(x) scanf("%d",&x) using namespace std; const int maxn = 2e5+50...
2019-04-25 10:33:57
284
原创 乒乓比赛【树状数组】
树状数组水题 #include <bits/stdc++.h> #define sc(x) scanf("%d",&x) using namespace std; const int maxn = 20006; const int maxm = 1e5+50; typedef long long ll; int n; int a[maxn]; int bit[maxm]; in...
2019-04-23 20:50:02
468
原创 合作网络 La3027 【并查集】
并查集 路径查询` #include <bits/stdc++.h> using namespace std; const int maxn =1e5+50; const int mod = 1e9+7; int fa[maxn]; int edge[maxn]; int n; void init() { for(int i=0;i<maxn;i++) fa[i]=i; me...
2019-04-23 20:27:49
214
原创 易爆物 LA 3644【并查集】
水题 并查集维护是否有环。如果有两个节点在同一个集合里面。再添加这两个节点会形成环 #include <bits/stdc++.h> using namespace std; const int maxn =1e5+50; typedef long long ll; int fa[maxn]; void init() { for(int i=0;i<maxn;i++) fa[i...
2019-04-23 20:26:47
184
原创 Gym - 101908C[树状数组+离散化]
降维,横纵分开考虑。多一个交点就多一块 计算有多少交点。树状数组维护一下逆序对就可以了 #include <bits/stdc++.h> #define cl(a) memset(a,0,sizeof(a)) #define sc(x) scanf("%d",&x) using namespace std; typedef long long ll; typedef pair&...
2019-04-21 22:32:58
311
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅