链接:https://ac.nowcoder.com/acm/contest/884/I来源:牛客网 题目描述 We call a,ba,ba,b non-equivalent if and only if a≠ba \neq ba​=b and a≠rev(b)a \neq rev(b)a​=rev(b), where rev(s)rev(s)rev(s) refers to the string obtained by reversing characters of sss, for e…
题意:让你找最大不可扩展全1子矩阵的数量: 题解:考虑枚举每一行为全1子矩阵的的底,然后从左到右枚举:up[i][j]:表示(i,j)这个位置向上可扩展多少,同时还有记录每个位置(i,j)向左最多可扩展到哪个位置pos; 用单调栈维护一个递增的{up[i][j],pos},如果当st.top.first>up[i][j]时,表示栈顶的元素最右可扩展到j-1; lzero:表示下一行最右0所在位置,如果st.top.second<=lzero则表示该栈顶所表示矩阵不可再往下扩展,则对答案贡献1:…
layout: post title: 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题) author: "luowentaoaa" catalog: true tags: mathjax: true - ACM-ICPC 题意 给你两个由数字组成的字符串\(S\),\(T\) 长度为\(1e3\),问你S中有多少个子序列的值大于字符串T: 思路 首先在比赛的时候一眼确定是\(N^2\) 复杂度的DP,但是想了两三个小时却没想到怎么转移,各种…
题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9:  对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可.     后者mod=1e9,5才mod下没有二次剩余,所以不能这么做了.可以分解mod,然后利用循环节搞. zoj: #include <bits/stdc++.h> using namespace std; typedef long long LL; ; ; LL fac[N],A[N],B[N]; void Init() {…
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elements are called equivalent if and only if RMQ(u,l,r)=RMQ(v,l,r)RMQ(u,l,r)=RMQ(v,l,r) for all 1≤l≤r≤m1≤l≤r≤mwhere RMQ(w,l,r)RMQ(w,l,r) denotes the inde…
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld 题目描述 Bobo knows that ∫ ∞ 0 1 1 x 2 d x = π 2 . ∫0∞11+x2 dx=π2. Given n distinct positive integers a 1 , a 2 , -…
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld 题目描述 Two arrays u and v each with m distinct elements are called equivalent if and only if R M Q ( u ,…
链接:https://ac.nowcoder.com/acm/contest/882/D来源:牛客网 Given a vertex-weighted graph with N vertices, find out the K-th minimum weighted clique. A subset of vertices of an undirected graph is called clique if and only if every two distinct vertices in th…
链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them into either red team or white team such that each team consists of exactly N people and the total competitive value is maximized. Total competitive va…
链接:https://ac.nowcoder.com/acm/contest/888/E来源:牛客网 Gromah and LZR have entered the fifth level. Unlike the first four levels, they should do some moves in this level. There are nn_{}n​ vertices and mm_{}m​ bidirectional roads in this level, each road…
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements are called equivalent if and only if RMQ(u,l,r)=RMQ(v,l,r)RMQ(u,l,r)=RMQ(v,l,r) for all 1≤l≤r≤m1≤l≤r≤m where RMQ(w,l,r)RMQ(w,l,r) denotes the index of…
链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 Amy asks Mr. B  problem D. Please help Mr. B to solve the following problem. Amy wants to crack Merkle–Hellman knapsack…
链接:https://ac.nowcoder.com/acm/contest/886/J来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 Rowlet is playing a very popular game in the pokemon world. Recently, he has encountered a problem and wants to ask for…
链接:https://www.nowcoder.com/acm/contest/141/E 来源:牛客网 题目描述 Eddy likes to play with string which is a sequence of characters. One day, Eddy has played with a string S for a long time and wonders how could make it more enjoyable. Eddy comes up with foll…
链接:https://www.nowcoder.com/acm/contest/105/H来源:牛客网 n个桶按顺序排列,我们用1~n给桶标号.有两种操作: 1 l r c 区间[l,r]中的每个桶中都放入一个颜色为c的球 (1≤l,r ≤n,l≤r,0≤c≤60) 2 l r   查询区间[l,r]的桶中有多少种不同颜色的球     (1≤l,r ≤n,l≤r) 输入描述: 有多组数据,对于每组数据:第一行有两个整数n,m(1≤n,m≤100000)接下来m行,代表m个操作,格式如题目所示.…
(牛客场场有笛卡尔树,场场都不会用笛卡尔树...自闭,补题心得) 题目链接:https://ac.nowcoder.com/acm/contest/884/C 题意:给出两个序列a,b,求max{min a[l,r]*sum b[l,r]} 一个比较显然的做法是通过线段树/ST表维护区间最值,不过nlogn的做法容易被卡常,(zkw线段树可过)不过赛时提高了时限到3s,基本上就很好写了 直接维护区间最小/大值下标,然后从最小值开始进行计算答案,在最小值的左边找到最小/最大的前缀和(找最大是为了处…
>传送门< 题意:求最少需要多少个3的倍数按位或后可以得到数字a 思路:利用3的倍数对应的二进制数的性质来先选出一个x,然后根据数字a再配一个y出来 首先,我们都知道十进制中,任意一个数只要每一位相加的和能被3整除,那么这个数就能被3整除. 这是为什么? 因为十进制中每一个位都会10^k次方,那么仅仅是每一位%3的值都是余1,那么我们只要凑3个余1的,那么3就能被这个数整除. 这题思路一样,换成2进制,只要各个位置上的数mod 3后的和相加起来mod 3为0,则这个数就是3的倍数 接下来分类讨…
>传送门< 题意:给你n个城市,m条道路,经过每一条要花费这条路的代价,现给你k个机会,使得最多k条路的代价为0,问从起点s到终点t花费的最少代价 思路:分层图最短路经典裸题 方法一 Code #include <bits/stdc++.h> using namespace std; struct edge { int to, cost; }; typedef pair<int, int> P; // first是最短距离,second是顶点的编号 ; int n, m…
>传送门< 题意:给你一个字符串s,求出其中能整除300的子串个数(子串要求是连续的,允许前面有0) 思路: >动态规划 记f[i][j]为右端点满足mod 300 = j的子串个数,可以容易的转移 则状态转移方程为:f[i][(10*j+num[i]) %300] = f[i][(10*j+num[i]) %300] + f[i-1][j] 解释:假如给你个数3,很容易得出3mod300的值就是3,f[3] = 1,然后在3后面加一位1,变为31,则31mod300的值为31,f[31…
示例: 输入: 3 2 1 3 11 2 12 3 2 输出:1 题意:求s,t最短路,可将k条边权值置零. 题解:分层图最短路原题 #include<bits/stdc++.h> using namespace std; typedef long long int ll; ; const int INF = 0x3f3f3f3f; struct State { // 优先队列的结点结构体 int v, w, cnt; // cnt 表示已经使用多少次免费通行权限 State() {} Sta…
示例: 输入: 31 -1 11 2 3 输出: 3 题意:求最大的(a区间最小值*b区间和) 线段树做法:用单调栈求出每个数两边比b数组大的左右边界,然后用线段树求出每段区间的和sum.最小前缀lsum.最小后缀rsum,枚举每个数a[i],设以a[i]为最小值的区间为[l,r] 若a[i]>0,则最优解就是a[i]*(b数组[l,r]的区间和),因为a数组[l,r]上的数都比a[i]大. 若a[i]<0,则最优解是a[i]*(b数组[l,i-1]上的最小后缀+b[i]+b数组[i+1,r]…
示例1: 输入:600 输出:4 说明:'600', '0', '0', '00' are multiples of 300. (Note that '0' are counted twice because it appeared two times) 示例2: 输入:123000321013200987000789 输出:55 题意:给一个全由数字字符组成的字符串,求出是300倍数的子串的个数.0,00,000等都算,并考虑前导为0的情况. 题解:让求的是300的倍数,但是呢我们可以拆成既是…
示例1: 输入: 2 3 7 输出: 1 32 3 6 说明:3=3, (3|6)=7 题意:输出尽可能少的数字,他们的按位或结果为输入的数字a. 题解:(表示看不懂题解,看山东大佬的代码看懂的)首先:有两个奇怪的现象,就是一个数字的二进制(我的定义是第一位为0,即偶数)有且只有2个1,且分别在奇数位和偶数位上时,这个数一定是3的倍数.如果一个数字a(a>3)在奇数位和偶数位都有1,且1的数量都大于等于1,当a%3==1时,只有拿走一个偶数位上的1即可%3==0:当a%3==2时,只有拿走一个奇…
示例1: 输入: 4 21 23 13 42 4 输出:2 说明: They can meet at place 1 or 3. 题意:从K个点到达不联通图某个点需要的最短时间,这个最短时间是这K个人最后到达的人所需的时间. 思路:(我觉得官方给的题解挺好理解的就直接复制过来了) 一句话题解:考虑距离最远的两个关键点,设它们的距离为d,d/2上取整即为答案. 必要性:这两个人要碰面,必然要走至少d/2步. 充分性:我们取两人路径中和一头距离为d/2上取整的一个点,让所有人在这相聚.如 果有一个人…
题目链接:https://ac.nowcoder.com/acm/contest/884/J 题意:给定一个无向图,有n个点,m条边(n,m<=1e3),起点S.终点T,在可以将k条边的权值变为0的条件下求S到T的最短路. 思路:这种题目要将原图分为k+1层,第i层表示将i条边的权值变为0,在这个图上dijkstra,答案为min(dis[T+i*m])(0<=i<=k). AC代码: #include<cstdio> #include<algorithm> #i…
https://ac.nowcoder.com/acm/contest/884/K 一开始整了好几个假算法,还好测了一下自己的样例过了. 考虑到300的倍数都是3的倍数+至少两个零(或者单独的0). 求以第i个位置的数为结尾的前缀和为j的数的方案数. 当遇到至少两个0的时候,ans+=dp[0][i-2]+1. +1是那两个0的贡献. 这样子算会漏算单独的0的贡献,最后加回去. 还因为忘记mod3段错误好几次. 老了. #include <bits/stdc++.h> using namesp…
>传送门< 题意:n给城市有n-1条路相连,每两个城市之间的道路花费为1,有k个人在k个城市,问这k个人聚集在同一个城市的最小花费 思路:(官方给的题解写的挺好理解的) 考虑距离最远的两个关键点,设它们的距离为d,d/2上取整即为答案. 必要性:这两个人要碰面,必然要走至少d/2步. 充分性:我们取两人路径中和一头距离为d/2上取整的一个点,让所有人在这相聚.如 果有一个人在d/2时间内到不了,那么它和路径两头中与它远的那一头的距离大于d,与 最远的假设矛盾. 找到这样最远的一对点类似找树的直…
传送门 k题: 题意: 给你一串由数字构成的字符串,你从这个字符串中找子字符串使这个字符串是300的倍数 题解: 这道题和第三场的B题极其相似 首先可以把是三百的倍数分开,必须要是100和3的倍数 是100的倍数就要求后面必须有两个0 是3的倍数就可以通过这个子字符串的数字之和是3的倍数来判断 那么暴力来计算子字符串肯定会超时,所以这个3的倍数这里要优化 首先我们要对这个字符串进行初始化,计算它的前缀和取余3后的结果 首先对一个0的出现要特判,因为题目上说了0也算300的倍数 其次大家想一下如果…
链接: https://www.nowcoder.com/acm/contest/141/A 题意: 有n(1≤n≤36)个物品,每个物品有四种代价pi,ai,ci,mi,价值为gi(0≤pi,ai,ci,mi,gi≤36),求四种代价分别不超过P,A,C,M(0≤P,A,C,M≤36)的条件下能获得的最大价值,输出所选择的物品. 分析: 01背包的思路,只是代价多了几个而已,数组开多几维就好了.可以用vis[i][p][a][c][m]来表示在四种代价分别为p,a,c,m的状态下是否用第i件物…
>传送门< 题意 $n$个宽度为$w_{i}$,高为$h_{i}$ 的 木块,要求分成$k$组,对于每组内的所有木块,高度都变为组内最低木块的高度,宽度保持不变,求变化的最小面积. 分析 由于$dp$状态定义不同写法也不同,这里给出一种解法 高度比较高的木块为迁就高度比较低的(为了$dp$方程及其优化),所以先把木板按照高度从高到低排序 如果设$d[i][k]$ 为前$ i $个分成 $k $份可以保留的最大面积,那么答案就是 $tot−d[n][k]$($tot$ 为初始总面积) 考虑如何转…