07 2019 档案
摘要:https://vj.ti12z.cn/b02428b1bbcf4609f7b121c06ef01b09?v=1564291265 A. 思路当K为1时显然的和N的奇偶性有关,那么我们考虑一下K>1 K>1K>1的情况对于先手的Adrien来说,他对任意的N颗石子,他都可以将这N颗石子分成两段
阅读全文
摘要:#include using namespace std; const int N=200010; int sum,ans[N],base,now,n; int main() { int T; scanf("%d",&T); while (T--) { sum=0; scanf("%d",&n); for (int...
阅读全文
摘要:#include using namespace std; const int maxn=2000101; struct node { int son[30],flag,fail,ans; void clear() { memset(son,0,sizeof(son)); fail=flag=0; } } trie[maxn]; ...
阅读全文
摘要:struct trie { int tree[maxn][30],sum[maxn],flag[maxn],tot; void insert_(char *str) { int len = strlen(str); int root = 0; for (int i = 0; i using namespace std; ...
阅读全文
摘要:A. Remove a Progression Description: You have a list of numbers from $1$ to $n$ written from left to right on the blackboard. You perform an algorithm
阅读全文
摘要:#include typedef long long ll; using namespace std; const ll maxm=55000; const ll maxn=300; const ll inf=0x3f3f3f3f; ll n,m,d[maxn],u[maxm],d2[maxn],v[maxm],w[maxm],d1[maxn]; struct Dijkstra ...
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=6604 Problem Description Country A and B are at war. Country A needs to organize transport teams to deliver
阅读全文
摘要:#include #include #include using namespace std; struct Point { double x,y; Point() {}; Point(int _x,int _y):x(_x),y(_y) {}; } p[400]; double dis(Point a,Point b) { return sqrt(...
阅读全文
摘要:采用分治的思想,把n个点按照x坐标进行排序,以坐标mid为界限分成左右两个部分,对左右两个部分分别求最近点对的距离,然后进行合并。对于两个部分求得的最近距离d,合并过程中应当检查宽为2d的带状区间是否有两个点分属于两个集合而且距离小于d,最多可能有n个点,合并时间最坏情况下是O(n^2).但是,左边
阅读全文
摘要:1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const ll mod=1e9+7; 5 const int N=2e6+10; 6 ll c[N],b[N]; 7 ll n,k,a,ans; 8
阅读全文
摘要:1 /* 2 3 4 #include <bits/stdc++.h> 5 6 using namespace std; 7 typedef long long ll; 8 const int N=1e5+10; 9 const ll inf=0x3f3f3f3f3f3f3f3f; 10 struc
阅读全文
摘要:1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int N=100101; 5 int n,pre[N],num0,num1,a[N*3],ans; 6 char c[N]; 7 int main(){ 8 scanf("%d"
阅读全文
摘要:1 #include <bits/stdc++.h> 2 3 using namespace std; 4 typedef long long ll; 5 const int N=3030; 6 ll a[N],pre[N],ans[N],inv3; 7 const ll mod=998244353
阅读全文
摘要:1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N=2000; 4 char c1[N],c2[N]; 5 int n,m,f[N][N]; 6 int main() { 7 scanf("%d", &n); 8 scanf
阅读全文
摘要:1 #include <bits/stdc++.h> 2 using namespace std; 3 const int m=6000; 4 int f[1010][m*2+2],n,a[2000],b[2000],k; 5 int main() { 6 memset(f, 0x3f, sizeo
阅读全文
摘要:1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=3000; 4 char c1[N],c2[N]; 5 int l1,l2,d[N][N],k; 6 int main() { 7 scanf("%s", c1); 8 sc
阅读全文
摘要:1 #include <bits/stdc++.h> 2 using namespace std; 3 const int inf=0x3f3f3f3f; 4 typedef long long ll; 5 const int M=300001; 6 const int N=100001; 7 st
阅读全文
摘要:1 #include <bits/stdc++.h> 2 const int N=100000; 3 using namespace std; 4 vector<int>E[N]; 5 int in[N],n,pos,flag,ok,m,sort1[N],stop,tmp[N]; 6 char X,
阅读全文
摘要:1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,m,k; 4 const int maxn=1e6+10; 5 const int maxm=9e6+10; 6 const int inf=0x3f3f3f3f; 7 struct D
阅读全文
摘要:Path 先跑两遍最短路,正着一边,反着一遍,求出最短路的图,在新图上求最小割 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e4+7; 4 const int maxm=2e4+7; 5 #define ll
阅读全文
摘要:1 #include <bits/stdc++.h> 2 3 using namespace std; 4 typedef long long ll; 5 char c[1000]; 6 ll l,k1,k2,k3,k4,k,kk,d; 7 8 int main(){ 9 while (~scanf
阅读全文
摘要:A.Eddy Walker B.Eddy Walker 2 C.Go on Strike! D.Kth Minimum Clique E.MAZE F.Partition problem G.Polygons H.Second Large Rectangle 1 #include<bits/stdc
阅读全文
摘要:1.若有1克、2克、3克、4克的砝码各一 枚,能称出哪几种重量?各有几种可能方案? 如何解决这个问题呢?考虑构造母函数。如果用x的指数表示称出的重量,则: 1个1克的砝码可以用函数1+x表示, 1个2克的砝码可以用函数1+x2表示, 1个3克的砝码可以用函数1+x3表示, 1个4克的砝码可以用函数1
阅读全文
摘要:1.没有上司的舞会 某大学有N个职员,编号为1~N。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri,但是呢,如果某个职员的上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了。所以,请
阅读全文
摘要:题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 输入输出格式 输入格式: 第一行包含三个正整数N、M、S,分别表示树的结点个数、询问的个数和树根结点的序号。 接下来N-1行每行包含两个正整数x、y,表示x结点和y结点之间有一条直接连接的边(数据保证可以构成树)。 接下来M行
阅读全文
摘要:题目描述 如题,一开始有N个小根堆,每个堆包含且仅包含一个数。接下来需要支持两种操作: 操作1: 1 x y 将第x个数和第y个数所在的小根堆合并(若第x或第y个数已经被删除或第x和第y个数在用一个堆内,则无视此操作) 操作2: 2 x 输出第x个数所在的堆最小数,并将其删除(若第x个数已经被删除,
阅读全文
摘要:双指针就是有两个指针𝑎和𝑏。这个方法目的一般是为了统计这样的二元组的一些信息(比如数量、极值等) • 这样的二元组可能描述了一些其他东西,比如说一个闭合区间 • 如果分析题目性质可以发现,一个指针向一个方向动,另一个指针也只会单向移动,也就是所谓的“单调性”,那就可以用这个方法,移动指针的时间复
阅读全文
摘要:题目描述 有一个 1 ∗ n 的矩阵,有 n 个正整数。 现在给你一个可以盖住连续的 k 的数的木板。 一开始木板盖住了矩阵的第 1 ∼ k 个数,每次将木板向右移动一个单位,直到右端与第 n 个数重合。 每次移动前输出被覆盖住的最大的数是多少。 输入输出格式 输入格式: 第一行两个数,n,k,表示
阅读全文
摘要:A.Equivalent+Prefixes 思路: 二分答案,然后运用单调栈求出右边第一个比它小的数,若对于每一个二分答案左边的每一个数右边第一个比它小的数位置必须相同。 1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 const int
阅读全文
摘要:题目描述 某大学有N个职员,编号为1~N。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri,但是呢,如果某个职员的上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了。所以,请你编程计算
阅读全文
摘要:题目描述 wjyyy在玩跑跑卡丁车的时候,获得了一个飞碟解除器,这样他就可以免受飞碟的减速干扰了。飞碟解除器每秒末都会攻击一次飞碟,但每次只有p/q的概率成功攻击飞碟。当飞碟被成功攻击时,减速状态解除。如果攻击失败,飞碟会使wjyyy的平均速度变为前一秒的1/k倍。wjyyy一开始以v m/s的速度
阅读全文
摘要:#include using namespace std; const int maxn=100010; const int inf=0x3f3f3f3f; typedef pair PI; struct MCFC { struct edge { int to, next, cap, flow, cost; } e[maxn]; int head[m...
阅读全文
摘要:1 priority_queue,vector >,greater >q; 2 int prime() { 3 ans = 0; 4 q.push(make_pair(0, 1)); 5 while (q.size()) { 6 int c = q.top().first, x = e[q.top().second].t; 7 ...
阅读全文
摘要:1 void merge_sort(int l,int r) { 2 if (l == r) { 3 return; 4 } 5 int mid = l + r >> 1; 6 merge_sort(l, mid); 7 merge_sort(mid + 1, r); 8 int i = l, j = mid + 1...
阅读全文
摘要:1 #include 2 using namespace std; 3 const int p=10000; 4 typedef long long ll; 5 int n,m; 6 7 struct node { 8 ll a[2][2]; 9 10 node operator*(const node &b) const { 11 node...
阅读全文
摘要:题目描述: 相信奇迹的人,本身就和奇迹一样了不起。——笛亚 《星游记》 我们称一个日期为一个八位数,第1~4位构成年,第5~6位构成月,第7~8位构成日,不足位数用0补足。同时,要求日期所代表的这一天真实存在,且年的范围为1~9999。出现奇迹的日期都存在相同的特点:由“日”组成的两位数,由“月+日
阅读全文
摘要:题目描述 世间万物都置身于缘分编织的大网中。缘分未到,虽历经千劫,却不能相遇。缘分到了,在草原上都能等到一艘船。——《一禅小和尚》一禅希望知道他和师父之间的缘分大小。可是如何才能知道呢?一禅想了个办法,他先和师父约定一个正整数 ,接着他们各自在心里想一个不超过 的正整数。一禅认为,他和师父心里想的这
阅读全文
摘要:题目描述 给定一个n次多项式 ,求它在a[n]x^n+a[n-1]x^(n-1)+a[n-2]x^(n-2)+...+a[0],求它在x=x0处的导函数。 输入 有多组测试数据。 第一行一个正整数T。接下来3T行,对于每组数据,第一行一个正整数n,表示多项式的次数;第二行n+1个整数,表示这个多项式
阅读全文
摘要:1 void toposort() { 2 int h = t = 0; 3 for (int i = 1; i <= n; i++) { 4 if (in[i] == 0) { 5 q[t++] = i; 6 } 7 } 8 while (h != t) { 9 k = q...
阅读全文
摘要:1 void build(int l,int r,int rt) { 2 lazyp[rt]=0; 3 lazym[rt]=1; 4 if (l == r) { 5 sum[rt] = a[l]; 6 return; 7 } 8 int mid = (l + r) >> 1; 9 ...
阅读全文
摘要:单调栈:就是栈中存储元素的某种信息是单调的栈 • 单调栈可以干什么呢? • 可以线性寻找一个元素左边(或右边)第一个满足某种条件的元素 • 比较常见的问题是:给定一个序列,对于每个数寻找其左边(或右边)第一个比它大(或比它小)的数 以寻找每个数左边第一个比它大的数为例 • 从右往左扫,维护一个栈,存
阅读全文
摘要:1 ans = dp[1] = 1; 2 for (int i = 1; i d[l]) { 12 d[++l] = b[i]; 13 } else { 14 int k = lower_bound(d + 1, d + l + 1, b[i]) - d; 15 d[k] = b[i]; 16 ...
阅读全文
摘要:1 struct node { 2 int u, v, w; 3 4 bool operator<(const node &b) const { 5 return w < b.w; 6 } 7 }a[M]; 8 9 int find(int x) { 10 if (x == f[x]) { 11 return ...
阅读全文
摘要:1 for (int i=1;i d[l]) { 23 d[++l] = b[i]; 24 } else { 25 int k = lower_bound(d + 1, d + l + 1, b[i]) - d; 26 d[k] = b[i]; 27 } 28 } 29 pr...
阅读全文
摘要:1 #include<cstring> 2 #include<stack> 3 #include<cstdio> 4 using namespace std; 5 6 const int N=400010; 7 char c[N]; 8 int n,m,i,j,next[N],l; 9 stack<
阅读全文
摘要:1 int gcd(int a,int b) { 2 if (!b) { 3 return a; 4 } 5 return gcd(b, a % b); 6 }
阅读全文
摘要:1 int linker[MAXN * 2]; 2 bool used[MAXN * 2]; 3 4 bool dfs(int u) { 5 for (int i = h[u]; i; i = e[i].n) { 6 int v = e[i].t; 7 if (!used[v]) { 8 used[v] = 1; ...
阅读全文
摘要:1 for (int k=1;i<=n;i++){ 2 for (int i=1;i<=n;i++){ 3 for (int j=1;j<=n;j++){ 4 f[i][j]=min(f[i][j],f[i][k]+f[k][j]); 5 } 6 } 7 }
阅读全文
摘要:/* 裴蜀定理: a,b d=(a,b) >ax+by=d=(a,b)*/int exgcd(int a,int b,int &x,int &y) { if (!b) { x = 1;y = 0;return a; } int d = exgcd(b, a % b, y, x); y -= a /
阅读全文
摘要:1 /* 2 算术基本定理 3 n=p1^a1*p2^a2*p3^a3*...*pn^an 4 5 约数个数:(p1+1)*(p2+1)*(p3+1)*..*(pn+1) 6 phi(n)=n*(1-1/p1)*(1-1/p2)*...*(1-1/pn) 7 8 欧拉数:1-n中与n互质的数的个数 9 phi(n)=n*(1-1/p1)*(1-1/p2)*......
阅读全文
摘要:const int maxn=1e5+7; const int maxm=1e5+7; const int inf=0x3f3f3f3f; struct Dinic { struct Edge { int next, f, to; } e[maxm]; int head[maxn], dep[maxn], tol, ans; int cur[max...
阅读全文
摘要:void Dijkstra(int u) { memset(vis,0,sizeof(vis)); for(int t=1;t,vector >,greater > >q1; int dijkstra(int s,int t) { memset(d,inf,sizeof(d)); memset(v,0,sizeof(v)); d[s] = 0; q1.push(make_...
阅读全文
摘要:1 int lowbit(int x) { 2 return x & -x; 3 } 4 5 void change1(int x,int d) //单点修改 6 { 7 for (int i = x; i <= n; i += lowbit(i)) { 8 c[i] += d; 9 } 10 } 11 12 int sum1...
阅读全文
摘要:问题描述: 给定n个整数(可能有负数)组成的序列a1,a2,...,an,求该序列的最大子段和。如果所有整数都是负数,那么定义其最大子段和为0。 思路: 1.暴力枚举左端点右端点然后求和.O(n^3) 2.预处理前缀和,枚举左端点右端点.O(n^2) 3.类似DP 1 for (int i = 0;
阅读全文
摘要:题目描述 You are given a string S of length N. Among its subsequences, count the ones such that all characters are different, modulo 109+7. Two subsequenc
阅读全文
摘要:题目描述: There are N stones arranged in a row. The i-th stone from the left is painted in the color Ci.Snuke will perform the following operation zero or
阅读全文
摘要:题面: 给定一个非负整数序列,定义区间的分值为=区间和*区间最小值,求出分值最大区间,及最大的分值。 思路: 把每一个数当作最小,看看延伸最左,最右在哪里 单调栈:以左边为例,单调递减 代码: 1 #include<bits/stdc++.h> 2 using namespace std; 3 co
阅读全文
摘要:题面 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 输入: word1 = "horse", word2 = "ros"输出: 3解释: horse -> rors
阅读全文
摘要:题面 给出B地区的村庄数N,村庄编号从0到N-1,和所有M条公路的长度,公路是双向的。并给出第i个村庄重建完成的时间ti,你可以认为是同时开始重建并在第ti天重建完成,并且在当天即可通车。若ti为则说明地震未对此地区造成损坏,一开始就可以通车。之后有Q个询问(x,y,t),对于每个询问你要回答在
阅读全文
摘要:题面 在一个只包含A、B、C的字符串,有一种操作,可使 “ABC” 变成 ”BCA“,求字符串s的最多操作数。 1≤∣s∣≤200000 思路: 易得,该操作是将A与BC交换位置,可用 1、0分别代表“A”、“BC”。题意转化对一个只包含10的序列,将所有的10更新01,即将所有的0放在1前面。假设
阅读全文
摘要:题面: 有N个方块排成一排,从左到右编号为1,2,...,N。给你一个长度为N的字符串S. 和#。如果S的第i个字符是'#',则Square i包含一块岩石; 如果S的第i个字符是'.',则Square i是空的。一开始,Snuke站在Square A上,Fnuke站在Square B上。 你可以多
阅读全文
摘要:题面: 首先选择金币数量,然后发牌姬会给你发5张扑克牌,其中2最小,A最大,Joker可以替换成任何牌。根据组成的牌型金币会翻不同的倍数,牌型有如下11种: 无对(No Pair):没有对子,你的金币被发牌姬拿走了;一对(One Pair):一个对子,金币也会被发牌姬拿走;两对(Two Pair):
阅读全文
摘要:题面: 这个游戏可以简化成:谱面由N个键和M条连线组成,每两个键之间有一个连线,玩家需要在键之间滑动,且连线的方向是固定的,玩家每次选择一个键,把所有从这个键出发的连线都消除掉,花费为ai,也可以将每个结束在这个点的连线消除,花费Bi。不用担心,LiMn2O4的手指足够多。最后让连线全部消失,得分就
阅读全文
摘要:题面: 有n个盒子,有个小球小球出现在每个盒子的概率为p[i],你现在可以问类似(小球是否在盒子{1,4,……,n}中?)(1-n的一个子集)的问题,问策略最优情况下,猜出小球所在盒子的猜测次数的数学期望。 思路: 因为任意一次询问和回答,都可以确定其中一半的球球集合包含目标球,另一半则不包含目标球
阅读全文
摘要:题面: 有一棵点权为0或1的树,问所有0的点到所有1的距离和以及所有1的点到所有0的距离和。 一个热狗树的美味程度,定义为每个节点到其他和自己口味不一样的节点的最短距离之和的和,也就是任意两个口味不同的节点之间的路径长度和。请你求出这颗树的美味值,并且答案对998244353取模。 思路: 树形dp
阅读全文
摘要:题面: 长期以来,LiMn2O4常常会因为自己成为不了数学选手而苦恼,并曾经有过一次转型的尝试。那是一个月黑风高的十一长假,LiMn2O4拿起了厚厚的《具体数学》。路过的practer看见了,practer说你有没有办法求一下这个公式的值: LiMn2O4看了眼公式,说这个值有无理数,怎么表示?可以
阅读全文
摘要:题面: 现在你有v1块钱,v2积分,能免费(免积分)收集k个火石碎片,现在总共有n个火石碎片,每个碎片需要的钱a或者积分b,碎片的能量为val。我们希望收集火石碎片,使能量的总和尽可能大,问你skyer_hxx最多可以拿到能量总和的最大值是多少? 思路: 0/1背包 代码: 1 #include <
阅读全文
摘要:题面: 定义一个6位二进制数上的运算 @ : a@b=(c,d)。其中 c = a的高3位*b的低3位 ; d = a的低3位*b的高3位。例如 010 001 @ 011 001 = (010*001 , 001*011) = (2*1,1*3) = (2,3) 。T给出了两个操作数a和b。以及一
阅读全文
摘要:题面: 假设他拥有N格体力。初始摩擦值为0,每次可以选择可以摩擦或者行走。摩擦消耗两格体力,第n次的摩擦值=第n-1次的摩擦值*2+2。行走消耗一格体力,第n次的摩擦值=第n-1次的摩擦值*1+1。求最大的摩擦值为多少? 思路: 贪心,消耗两格体力比消耗一格体力更优,所以如果n为奇数则先消耗一格体力
阅读全文
摘要:题面: 发现了一个由'('和')'组成的环,他想知道如果将环从某处断开,得到的序列有没有可能让括号能够匹配。比如环"))(("可以拆成"))((" "())(" "(())" ")(()"四种,其中"(())"的括号就能够匹配,另外三种则不能。请你帮他设计一个程序,可以知道,由括号组成的环能不能得到
阅读全文
摘要:题面: 经常购买的网店有N家,每一家都记录了她退货的次数,为了减少自己的挑剔程度(所有的店里面最大的退货次数),她可以选择其中的K家,将这些店的数据清空。 请问她能最后获得的最小的挑剔程度是多少? 思路: 先从小到大排序,ans=a[n-k],注意k>=n的时候。 代码: 1 #include<bi
阅读全文
摘要:题目描述: n个庙,每个庙有n+1个小和尚;n+1个庙,每个庙有n+2个小和尚;n+2个庙,每个庙有n+3个小和尚....直到有m个庙,每个庙有m+1个小和尚.问n到m一共有多少个小和尚。 知识储备: 思路: 前缀和 代码: 1 #include<bits/stdc++.h> 2 using nam
阅读全文
摘要:题目描述 有一个邮递员要送东西,邮局在节点1.他总共要送N-1样东西,其目的地分别是2~N。由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有M条 道路,通过每条道路需要一定的时间。这个邮递员每次只能带一样东西。求送完这N-1样东西并且最终回到邮局最少需要多少时间。 输入 第一行包括两个整数
阅读全文

浙公网安备 33010602011771号