随笔分类 - 八中oj
摘要:这是做的最得意的一道题,当时在考场上得了90,是因为数据中A有100++的情况,Runtime_error了。。首先强调,本人不是用二分图,或者说不用图论算法,只涉及简单的枚举和记忆化思想。A国的人最多只能取两个,这个大家都能看出来,当然还可能不取。B国的人不去向常规考虑奇偶分组,这个会在后面提到。题意抽象为求一个最大完全图,那么当我们确定一个极大完全图后,任意一个元素都可以作为代表元,给定代表元之后,通过一边O(n)的扫描就能得到这个极大完全图。所以对于不含A国人的情况,我们只需要枚举一个B国人,把其他的B国人尽量多的加进去,这个加人的顺序与结果无关,而代表元可以使任意一个,因此可以用一个数
阅读全文
摘要:问题抽象成图论,对于每一对欢迎关系(A,B),我们从A向B连一条有向边,得到的图是有可能存在环的,在原图上使用Tarjan算法,得到一个新图(有向无环),如果缩后仅剩一个点,答案为n,即任意点都被其他点欢迎,否则统计每一个新点的出度,对于出度为0的点的个数1:答案是该点包含的原图点数,其他的牛都不能被他们欢迎>=2:答案为0,出度为0的点间互不欢迎。View Code 1 program pku2186(input,output); 2 type 3 node=^link; 4 link=record 5 goal:longint; 6 ...
阅读全文
摘要:题目不在累述,在RQNOJ或八中上都有。朴素方程很好写f[i]=max{f[j]+a*sqr(s[i]-s[j])+b*(s[i]-s[j])+c}典型的1D/1D方程,有数据范围来看,一定有O(n)算法,于是模式基本就确定下来了,我们要对方程进行变形。设对于f[i]决策x优于y且x<y则:f[x]+a*(s[i]-s[x])*(s[i]-s[x])+b*(s[i]-s[x])+c>f[y]+a*(s[i]-s[y])*(s[i]-s[y])+b*(s[i]-s[y])+c→f[x]+a*s[i]*s[i]-2*a*s[i]*s[x]+a*s[x]*s[x]+b*s[i]-b*s[
阅读全文
摘要:在网上的题解都说的那么轻松,可我打了3个小时,算法换了无数。最终也是加inline优化才过的,唉最大权闭合子图,模型很简单但是后两个数据大了点,第一个算法:指针链表+dinic 最大点80s++View Code 1 program profit(input,output); 2 const 3 oo = 199500714; 4 type 5 node = ^link; 6 link = record 7 goal : longint; 8 flow : longint; 9 next :...
阅读全文
摘要:题目大意:国际象棋中一共有6种棋子:king(国王)queen(皇后)bishop(教主)knight(骑士)rook(车)pawn(步兵) queen和knight不用说了;rook攻击水平和垂直两条线上的所有格子;pawn攻击前方两条斜线方向各一格;king攻击周围8个方向各1格;bishop攻击两条对角线上的所有格子。除knight以外,所有棋子的攻击范围均会被别的棋子所阻挡。(“前方”指x递增的方向,x行y列)。给出的棋盘上的棋子可能互相会攻击,不过你不用理会这些,你只要保证你摆放的bishop不与它们以及不互相攻击就可以了。问在电脑给出的棋盘上,最多能放几个bishop。输入:第一行
阅读全文
摘要:有向图有 N 个节点,从节点 0 出发,必须恰好在 T 时刻到达节点 N-1。 现在给出该有向图,总共有多少种不同的路径注意:不能在某个节点逗留,且通过某有向边的时间严格为给定的时间。用矩阵乘法把n个01邻接矩阵(连通性矩阵,a[i,j]=1表示 i 到 j 有一条有向边相连),则a[i,j]就表示走n步后从i到j的不同的路的条数。由于题目中边有权,而权值只是1..9,所以可以把每个点拆成9个点,即第i个点变成第9*(i-1)+1到第9*(i-1)+9个点,把这n个点各自拆出来的9个点串连即a[9*(i-1)+j,9*(i-1)+j+1]:=1(1<=j<=8),读入邻接矩阵时i到
阅读全文
摘要:每一切只能平行于一块蛋糕的一边(任意一边),并且必须把这块蛋糕切成两块。这样,要切成N块蛋糕,必须切N-1次。为了使得每块蛋糕看起来漂亮,我们要求N块蛋糕的长边与短边的比值的最大值最小。求出这个比值。最大最小≈二分答案。。。。然后搜索判定,dfs(xx,yy,limit,nn)表示要把长宽为xx,yy切成nn块蛋糕,答案不超过limit是否可行。View Code 1 program cake(input,output); 2 var 3 x,y,n:longint; 4 answer:double; 5 s:double; 6 procedure init; 7 begi...
阅读全文
摘要:又是一道平面图的题,有向边的处理要注意一下,向右的向上连,向下的向右连,向左的向下连,向上的向左连,然后转化即可,对于向上,左的,边界处的边没有必要连,最后还得用dijkstra,反正我的spfa超时2个点,不知道它牛怎么过的,只好打堆了...View Code 1 program noi2010(input,output); 2 type 3 node = ^link; 4 link = record 5 goal,w : longint; 6 next : node; 7 end; 8 var ...
阅读全文
摘要:一个网格图中求最小割,很特殊的是这个图是一个平面图,最小割=最大流=对偶图中最短路,把小三角换成点标号,重连边即可。我标号用的矩阵元素标号的思想,可能看着还算清楚,乘来乘去的。数据里还有n==1和m==1的数据。。。。。插个图片帮助理解。View Code 1 program beijing2006(input,output); 2 const 3 oo = 999999999; 4 type 5 node = ^link; 6 link = record 7 goal,w : longint; 8 next ...
阅读全文
摘要:1D1D动态规划,方程很容易写出来,f[i]=min{f[j]+(i-(j+1)+s[i]-s[j]-l)^2} 红色的地方要注意,因为j已经装进去了,所以是从j+1到i。通过函数性质,方程满足决策单调性,可以用二分法降到nlogn注意要用int64View Code 1 program hnoi2008_toy(input,output); 2 type 3 node = record 4 x,y,pos : longint; 5 end; 6 var 7 f : array[0..55000] of int64; 8 ...
阅读全文
摘要:强省江苏也有这种比较水的送分题,囧典型的2-SAT问题,对于某一种材料,要么做满菜,要么做汉菜,连边时枚举评委,两者有相同编号的矛盾菜式则连边,不满足一得第一个要求就得满足一的第二个要求如h1 m2m1 h3由于材料1只有一种,所以做h1就必须做h3,做m1就必须做m2晒代码View Code 1 program jsoi2010(input,output); 2 type 3 link=^node; 4 node=record 5 goal:longint; 6 next:link; 7 end; 8 node2=record ...
阅读全文

浙公网安备 33010602011771号