奶牛

愤怒的奶牛2(angry)

被刻印的时光 ゝ 提交于 2020-03-16 20:11:05
愤怒的奶牛2(angry) 题目描述 贝茜这头奶牛设计了她所认为的下一个热门视频游戏—“愤怒的奶牛”。她认为这是她完全原创的:玩家将一个弹弓射到一个一维的场景中,该场景由位于数字线上各个点的一组干草包组成。每只奶牛都有足够的力量引爆其落地地点附近的干草包,我们的目的是使用一系列奶牛引爆所有的干草包。 有N捆干草包位于这一行的不同整数位置x1,x2,...,xN,如果一头奶牛以能量R着陆在了数轴上的任意一个位置x,那么会引起半径为R(R-x..R+x)的爆炸,并摧毁范围内的所有干草包。 一共有K头奶牛允许被用来作为炮弹,每头奶牛的能量R都相同。请帮忙决定这个最小的能量,使得用这K头奶牛可以摧毁所有的干草包。 输入 第一行包含两个整数N,K(1<=N<=50,000,1<=K<=10) 接下来N行,每行包含一个整数xi,表示每捆干草包的位置(0<=xi<=1,000,000,000) 输出 一行一个整数,表示最少所需要的每头奶牛的能量值R 样例输入 7 2 20 25 18 8 10 3 1 样例输出 5 题目思路:这一道题我们先看数据,有点大,所以我们考虑二分。我们每次二分一个一个R(能量),我们用mid表示,如果我们所需的奶牛数小于等于所给奶牛数,则r=mid;如果我们所需的奶牛数小于所给的奶牛数,则l=mid T H E , E N D ! THE,END! T H E , E

算法优化专题F POJ - 2431

此生再无相见时 提交于 2020-03-03 16:22:43
【题目大意】 奶牛的车的油箱破了,每开一个单位距离会花费一单位体积油,奶牛距离城镇L个单位长度。在奶牛到城镇的路途中有n个加油站,第i个加油站距离城镇xi,能加yi的油。如果奶牛能到达城镇,则输出奶牛最少需要的加多少个加油站里的油。如果奶牛不能达到城镇输出-1. 【解题思路】 贪心 让奶牛用光油能到达位置x,那么此时要补充油只能从位置x(包括x)前面的加油站加油,很显然要选最多油的加油站。用大根堆维护加油站油量即可。 【代码】 # include <cstdio> # include <queue> # include <algorithm> using namespace std ; priority_queue < int > Q ; struct data { int x , y ; } a [ 10101 ] ; bool cmp ( data x , data y ) { return ( x . x < y . x ) ; } int main ( ) { int n , L , P ; scanf ( "%d" , & n ) ; for ( int i = 1 ; i <= n ; i ++ ) scanf ( "%d%d" , & a [ i ] . x , & a [ i ] . y ) ; scanf ( "%d%d" , & L , & P ) ; for

2020.2.19GDUT寒假训练排位赛1-A

笑着哭i 提交于 2020-02-26 02:53:57
A— Cow Gymnastics 题目大意: 为了提高身体素质,奶牛们开始练体操了!在每K个训练阶段(1≤K≤10),根据奶牛的表现(1≤N≤20)对N头奶牛进行排名。之后,她对这些排名的一致性感到好奇。如果一头牛在每次训练中都比另一头牛做得好,那么这一对两只不同的牛孰胜孰败是确定的。计算这样确定的对的总数。 输入 第一行包含两个正整数K和N, 接下来的K行将以某种顺序包含整数1…N,表示奶牛的排名(奶牛由数字1…N标识)。如果A出现在B之前,这意味着牛A比牛B做得更好。 输出 只有一行:确定的对的总数 题目分析: 数据比较小(1≤N≤20),所以直接暴搜每两头牛的关系,看是否这两头牛在每次排位是否一直保持单向关系。 代码实现: # include <iostream> # include <cstdio> # include <vector> using namespace std ; int c [ 25 ] [ 25 ] ; //存每次排位 int d [ 25 ] [ 25 ] = { 0 } ; //d[i][j] i与j的关系 int main ( ) { int k , n , ans = 0 ; cin >> k >> n ; for ( int i = 1 ; i <= k ; i ++ ) { for ( int j = 1 ; j <= n ; j ++ )

2020.2.19GDUT寒假训练排位赛1-D

谁都会走 提交于 2020-02-25 00:53:30
D — Circular Dance 题目大意: 两个谷仓位于一维数轴上的位置0和L(1≤L≤10 9 )。也有N头牛(1≤N≤5*10 4 )在不同的地点在数轴上的。每头奶牛i最初位于xi的某个位置,以每秒1单位的速度向正或负方向移动,用整数di表示,di为1或- 1。每头奶牛的体重wi也在范围[1,10 3 ]内。所有的奶牛总是以恒定的速度移动,直到下列事件之一发生:如果奶牛i到达谷仓,那么奶牛i停止移动。当两头牛i和j占据了同一个地方,而那个地方不是谷仓时,在这种情况下,奶牛i与j速度交换。注意,奶牛可能会在非整数的点相遇。 当进入谷仓的所有牛的重量之和至少是所有牛的重量之和的一半时,所用时间记为T。请确定在时间0…T范围内(包括时间T),两对牛的总相遇次数。 输入 第一行包含两个以空格分隔的整数N和L。 接下来的N行分别包含三个以空格分隔的整数wi、xi和di。所有的位置xi都是不同的,并且满足0<xi<L. 输出 只有一行,相遇对数。 题目分析: 两头奶牛相遇时交换速度可以看作互相穿过交换体重了,所以向左的有几头牛,最后就有几头牛归向0,向右的有几头牛,最后就有几头牛归向L。所以,对位置排序的奶牛,如果有n头牛,x头牛向左走,y头牛向右走。那么前x个重量一定会归向0位置,后y个重量会归为L位置。离谷仓最近的奶牛肯定先进,就可以算出时间T了

20190601dp专项

本秂侑毒 提交于 2020-02-11 22:41:57
1.接苹果 【问题描述】 奶牛喜欢吃苹果。约翰有两棵苹果树,有N只苹果会从树上陆续落下。如果掉苹果的时候,贝西在那棵树下,她就能接住苹果。贝西一开始在第一棵树下。在苹果掉落之前,她有足够的时间来回走动,但她很懒,最多只愿意移动K次。请计算一下她最多可以接住几只苹果。 【输入】 第一行:两个整数 \(N\) 和 \(K\) , \(1≤N≤1000;1≤K≤30\) 第 \(i+1\) 行有一个整数 \(T_i\) ,表示第i只苹果从哪棵树上掉落, \(1\) 表示从第一棵树, \(2\) 表示从第二棵树 【输出】 单个整数:表示能接住的最大苹果数量 【输入样例】 7 2 2 1 1 2 2 1 1 【输出样例】 6 【解释】 先待在第一棵树下接住两个,然后移动到第二棵树下接住两个,再返回第一棵树接住最后两个 这是一个显然的裸dp题,f[i][j],表示第i时间,已经移动j次取得的最大值,状态转移方程为: 然而我用了 \(f(i,j,k)\) 表示表示第 \(i\) 时间,已经移动 \(j\) 次,并且在第 \(k\) 树下时的 代码如下(非正解): #include<bits/stdc++.h> using namespace std; int n,k,t[1001],a[1001],f[1001][31][3],x,num=0; int main(){ scanf("%d%d",

POJ 3268 Silver Cow Party 【反向dijkstra】

六月ゝ 毕业季﹏ 提交于 2020-02-07 02:56:32
POJ 3268 Silver Cow Party 题目大意: 每个农场有一只奶牛,所有奶牛都要去指定的一个农场X中聚会,聚会结束后各自回自己的农场, 求所有的奶牛出门参加聚会再回到家中的最短用时,即求出耗时最长的奶牛的时间 具体思路: 最短路求解,先求x到各个农场的时间,再将各边反向,再求一次x到各个农场的时间。 将两个时间相加,最小的时间即为所求 (求图中所有点到指定点的最短距离可以转化为求指定点到所有点的最短距离,有向图要反向) 具体代码: # include <iostream> # include <cstdio> # include <stdlib.h> # include <algorithm> using namespace std ; const int N = 1005 ; const int INF = 1e5 ; int maps [ N ] [ N ] ; int rmaps [ N ] [ N ] ; //反向图 int visit [ N ] ; int dis [ N ] ; int rdis [ N ] ; int n , m , x ; void init ( ) { for ( int i = 1 ; i <= n ; i ++ ) for ( int j = 1 ; j <= n ; j ++ ) rmaps [ i ] [ j ] =

bzoj2442 [Usaco2011 Open]修剪草坪

拈花ヽ惹草 提交于 2020-02-06 03:32:07
2442: [Usaco2011 Open]修剪草坪 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1001 Solved: 502 [ Submit ][ Status ][ Discuss ] Description 在一年前赢得了小镇的最佳草坪比赛后,FJ变得很懒,再也没有修剪过草坪。现在, 新一轮的最佳草坪比赛又开始了,FJ希望能够再次夺冠。 然而,FJ的草坪非常脏乱,因此,FJ只能够让他的奶牛来完成这项工作。FJ有N (1 <= N <= 100,000)只排成一排的奶牛,编号为1...N。每只奶牛的效率是不同的, 奶牛i的效率为E_i(0 <= E_i <= 1,000,000,000)。 靠近的奶牛们很熟悉,因此,如果FJ安排超过K只连续的奶牛,那么,这些奶牛就会罢工 去开派对:)。因此,现在FJ需要你的帮助,计算FJ可以得到的最大效率,并且该方案中 没有连续的超过K只奶牛。 Input * 第一行:空格隔开的两个整数N和K * 第二到N+1行:第i+1行有一个整数E_i Output * 第一行:一个值,表示FJ可以得到的最大的效率值。 Sample Input 5 2 1 2 3 4 5 输入解释: FJ有5只奶牛,他们的效率为1,2,3,4,5。他们希望选取效率总和最大的奶牛,但是 他不能选取超过2只连续的奶牛

修剪草坪 HYSBZ - 2442

你说的曾经没有我的故事 提交于 2020-01-26 23:40:24
在一年前赢得了小镇的最佳草坪比赛后,FJ变得很懒,再也没有修剪过草坪。现在, 新一轮的最佳草坪比赛又开始了,FJ希望能够再次夺冠。 然而,FJ的草坪非常脏乱,因此,FJ只能够让他的奶牛来完成这项工作。FJ有N (1 <= N <= 100,000)只排成一排的奶牛,编号为1...N。每只奶牛的效率是不同的, 奶牛i的效率为E_i(0 <= E_i <= 1,000,000,000)。 靠近的奶牛们很熟悉,因此,如果FJ安排超过K只连续的奶牛,那么,这些奶牛就会罢工 去开派对:)。因此,现在FJ需要你的帮助,计算FJ可以得到的最大效率,并且该方案中 没有连续的超过K只奶牛。 Input * 第一行:空格隔开的两个整数N和K * 第二到N+1行:第i+1行有一个整数E_i Output * 第一行:一个值,表示FJ可以得到的最大的效率值。 Sample Input 5 2 1 2 3 4 5 输入解释: FJ有5只奶牛,他们的效率为1,2,3,4,5。他们希望选取效率总和最大的奶牛,但是 他不能选取超过2只连续的奶牛 Sample Output 12 FJ可以选择出了第三只以外的其他奶牛,总的效率为1+2+4+5=12。 思路:单调队列优化dp板子题,子问题可以归结为:dp[i][0/1],表示选/不选第i只牛,到第i只为止最大的效率,维护一个前缀和sum dp[i][0] = max

Kotlin学习(9)→类基础

瘦欲@ 提交于 2020-01-21 22:25:53
文章目录 1 、一个简单的动物类与init函数 2、类的构造函数 2.1 主构造函数 2.2 让类更加符合Kotlin风格 2.3 二级构造函数 2.4 构造函数的默认参数 3、成员属性和成员方法 4、伴生对象 5、总结 在期待着郭霖先生的《第一行代码(第三版)》时,意识到自己需要补充必要的Kotlin知识,现在通过写博客进行分享,争取拿到书之后早日上手。 使用的软件是IDEA 2019,文章中如有错误或者欠缺的地方,欢迎批评指正。 ( 参考书为《Kotlin从零到精通Android开发》,欧阳燊著,清华大学出版社2018年4月第一版,ISBN 978-7-302-49814-8)。感谢欧阳先生的优秀教材 。 1 、一个简单的动物类与init函数 根据之前其他语言的基础和Kotlin变量声明规则等,我们可以写一个很简单的动物类: class Animal { var name : String ? = null var age : String ? = null init { println ( "Animal: 这是个动物的类" ) } } 注意,Kotlin要求要么类中的非空成员属性(property)是抽象的(abstract),要么就要初始化。我们将动物的名字(name)和年龄(age)声明为可空类型,初始化为null,没有问题。 下面是一个函数init

[HAOI2006]受欢迎的牛 [强连通分量]

自作多情 提交于 2020-01-20 21:39:56
Description 每头奶牛都梦想成为牛棚里的明星。被所有奶牛喜欢的奶牛就是一头明星奶牛。所有奶牛都是自恋狂,每头奶牛总是喜欢自己的。奶牛之间的“喜欢”是可以传递的——如果A喜欢B,B喜欢C,那么A也喜欢C。牛栏里共有N 头奶牛,给定一些奶牛之间的爱慕关系,请你算出有多少头奶牛可以当明星。 Solution 每个奶牛是一个点,将爱慕关系看成边,建图。 考虑如果途中出现环,那么环上的奶牛都可能是大明星,所以可以把一个强连通分量放在一起考虑。 如果只有一个出度为0的强连通分量,那么里面全是明星,如果有两个或两个以上,牛棚里没有明星。 Code #include<bits/stdc++.h> using namespace std; const int N = 10010,M = 50010; struct Edge{ int u,v,next; }e[M * 2]; int head[N],tot; void add(int u,int v){ e[++tot].next = head[u]; e[tot].v = v; e[tot].u = u; head[u] = tot; } int low[N],dfn[N],s[N],ins[N],c[N],num,cnt,top; vector<int> scc[N]; void tarjan(int u){ low[u] = dfn