题目传送门 算法分析 不难看出这相当于是解\(n\)元一次异或方程组,类比\(n\)元一次方程组的解法,不难想到使用高斯消元。 发现数据范围比较大,\(n^3\)是肯定过不去的,因此想到01矩阵用bitset存储,用bitset Xor运算实现对其他方程的转化,时间复杂度\(\frac{n^3}{32}\)可以通过。 求最早确
class Solution { public: int lengthOfLIS(vector<int>& nums) { if(nums.size() == 0) return 0; vector<int> dp(nums.size(), 1); int maxm = 1; for(int i = 1; i < nums.size(); i++){
新建不超过\(k\)个无线路由器,求使路由器1、2连通最少的中间路由器。 首先常规建图,将相距不超过\(r\)的路由器(包括新建的)相连。 想到了分层\(dijkstra\)。类似的,作\(bfs\)时记录已经经过的新建路由器个数\(b\)。\(queue\)内节点的形式就是当前路由器编号、经过的新建路由器个数、经
问题描述: Ural大学有N名职员,编号为1~N。 他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。 每个职员有一个快乐指数,用整数 Hi 给出,其中 1≤i≤N。 现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。 在满足这个条件的前提下,主办方希望邀请一部
Codechef REBXOR Input 输入数据的第一行包含一个整数N,表示数组中的元素个数。 第二行包含N个整数A1,A2,…,AN。 Output 输出一行包含给定表达式可能的最大值。 Sample Input 5 1 2 3 1 2 Sample Output 6 Hint 满足条件的(l1,r1,l2,r2)有:(1,2,3,3),(1,2,4,5),(3,3,4,5)。 对
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 9; const int MaxN = N * N * N + 10; const int MaxM = N * N * 4 + 10; const int maxnode = MaxN * 4 + MaxM + 10; char g[MaxN]; struct DLX { int n, m, size; int U
原文链接:https://blog.csdn.net/u013480600/article/details/44646517 对于KMP算法,都会涉及到两个串 一个是待匹配串 char T[1000]//待匹配串 待匹配串的长度定为n 一个是模板串 char P[100]//模板串 模板串的长度定为
题意:给n*n的01矩阵,1i与j联通,0不联通,给m个点,表示依次走m个点,要求这些点的最短子序列,使最短子序列里的点走完的最短路与走完m个点的相同。 思路:先floyd预处理两两点之间的最短距离,预处理时需要注意i到i点距离为0,之后将第一个点放入答案,枚举答案的最后一个顶点与m中第二个顶点开始
题意 在给定的序列P中求一个子序列,使得在图中按照该子序列进行最短路径移动时可以完整经过原序列P code #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #define maxn 105 #define maxm 1000010 #define inf 0x3f3f3f3f using namespac
题目链接:https://ac.nowcoder.com/acm/contest/883/A 题目大意: 给出一个无向图和m条边,处理Q个询问 对于1 x y,将边序号为x到y的边反转,如果存在这条边则删除,不存在则增加。 对于2 x y,回答与点x直接相连的点集是否与y直接相连的点集是否相同,是则输出1,不是输出0 解题报告:
有N个比赛队(1<=N<=500),编号依次为1,2,3,。。。。,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。 Input输入有若干组,每组中的第一行
比赛总结: 看错F题意@byf 要勇于打表找规律 题解(不定更新) A EddyWalker B EddyWalker2 C Go on Strike! D Kth Minimum Clique E MAZE F Partition problem 题解:https://blog.csdn.net/liufengwei1/article/details/96729137 1 #include<bits/stdc++.h> 2
A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each circle separately, and the sum of numbers in two adjacent circles should be a prime. Note: the number of first circle should always be 1. Inputn (0 < n <
#include<bits/stdc++.h>#define MAXM 3010#define MAXN 3010using namespace std; int m,n,a[MAXM][MAXN],jx[MAXM][MAXN],x,y,u,v; int main(){ int i,j; cin>>m>>n; for(i=1;i<=m;i++) { for(j=1;j<=n;j++)
题目描述 给出一个长度为n的文本串,有Q次询问,每次给出一个字符串S,询问S是否在文本串中出现过 输入格式 第一行为两个整数n和Q,分别表示文本串长度和询问次数 第二行为长为n的文本串 接下来Q行,每行为一个字符串S 输出格式 输出Q行对应Q次询问的答案,若出现过则输出YES,否则输出NO 数据范
题目描述 一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标。现在地图上有n个目标,用整数xi,yi(0<=xi,yi<=5000)表示目标在地图上的位置,每个目标都有一个价值0<vi<100。激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆破范围,即那个边长为R的正方形的边必须和x,y
一本通OJ 1273 题目分析: 边界f[0]=1f[0]=1f[0]=1 转移方程f[j]+=f[j−a[i]]f[j]+=f[j-a[i]]f[j]+=f[j−a[i]] 注意f[]f[]f[]要开longlonglong longlonglong Code : #include <bits/stdc++.h> using namespace std; #define maxn 100000 #define maxm 100000 int n,m,a[m
APIO场外选手没事休闲做题。(看了yyb的题解才把这题做出来) 对操作进行分块,把每\(\text{SZ}\)个操作分成1组,里面大概有2类:没被修改过的和被修改过的。 接着对块内询问进行离线。 对于没有修改过的:我们可以直接排序然后把他们加入并查集。 对于修改过的,我们看他的时间是否大于当前操作
https://www.luogu.org/problemnew/show/P3387 思路:建原图–>tarjan求出图内所有的强联通分量–>建出DAG(缩点:即每个强联通分量视为一个新点)–>在得到的DAG上进行DP(其实是记搜…),不断更新最大点权和–>输出max值–>AC 代码: #include<cstdio> #include<iostream> #include<algo
题目链接:https://www.luogu.org/problemnew/show/P1541 思路: 考虑若一张卡片被使用过,则可以从它当时的状态来进行转移。 故设$f[i][j][k][l]$表示用了$i$张$1$卡,$j$张$2$卡......时分数的最大值。 枚举四张卡片是否使用过,从中选取最大的,最后加上当前的得分。 启示: $dp$不关心其过程
题目:https://www.luogu.org/problemnew/show/P1341 题意:给定n对字母对,要求构造一个个数为n+1的字符串,使得每一个字母对都在里面出现过。 思路:这种题目都卡了好久,代码能力真的不行了啊。 其实就是每个字母是节点,每个字母对就是这两个字母之间连一条边,每个字母对都要出现就是每条边都
非常好的题!期望+建矩阵是简单的,但是直接套高斯消元会T 所以消元时要按照矩阵的形态 进行优化 #include<bits/stdc++.h>using namespace std; const int maxn = 55;const int maxm = 55*55;const double esp = 1e-8;int n,m,r,dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};double a[maxm
LOG P1622 释放囚犯 传送门(洛谷) 题目描述: 输入数据: 20 3 3 6 14 输出数据: 35 分析: 容易看出,每次给犯人吃肉都是一个区间,则很容易得出此题为一个区间动归 区间动归的一般模板:f[i][j]=min(f[i][j],f[i][k-1]+f[k+1][j]+…) 这里的f[i][j]是表示放出i号到j号的犯人最少给
Description Solution 943718401=225*2^22+1 显然每行必须有两个,我们不妨枚举有k列有2个石子,那么有2(n-k)列有1个石子。 \[Ans=\sum\limits_{k=0}^{n}{m\choose k}{m-k\choose 2(n-k)}S_k\] 抽象一下问题,我们有n种颜色的球,每种颜色的球有两个且没有区别,现在要将它们放进k+2(n-k)个
思路:DP,01背包 ------------这道题目可以说是一道裸的 01背包,唯一的不同仅仅只是将原来的一维改成了两维。我不明白为什么是一道 普及/提高- 的题,所以在评分时评了普及-。 对于每一个愿望,只有两种选择:要么满足,要么不满足。然后 01背包跑一遍就 AC 了。 $ \rm code $ # include <bit