HDU - 1050】的更多相关文章

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1050 AC code: #include<stdio.h> #include<string.h> int m[210]; int main(void) { int t,n,i,j,st,en,ma; scanf("%d",&t); while(t--) { memset(m,0,sizeof(m)); scanf("%d",&n)…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1050 这道题目隔了很久才做出来的.一开始把判断走廊有重叠的算法都想错了.以为重叠只要满足,下一次moving的起始room小于或等于上一次moving的结束room则证明有重复.这样只能保证局部不能同时进行moving,但是根本得不出其他moving哪些是可以同时进行搬动的. 正确的思路是,统计最大的重叠数,再乘以10即可.具体做法:把每个房间之间的走廊作为一个统计单位,当所有的办公桌都搬运完成之后…
http://acm.hdu.edu.cn/showproblem.php?pid=1050 这个题我首先直接用的常规贪心,用的和那个尽可能看更多完整节目那种思路.但是.......一直WA....T_T.... 后来在网上搜了一下这个题,发现好多人都有问题,都没有求出来,基本上都用的对尾部排序求的方法. 其实这个题因为是两排房间,所以1和2公用一个走廊,其中一个在需要移动的时候宁外一个还是不能移动. 所以我后面改了思路,直接改成了用两次排序直接找里面重叠部分最多的.(尾部排序的时候也要处理走廊…
http://acm.hdu.edu.cn/showproblem.php?pid=1050 当时这道题被放在了贪心专题,我又刚刚做了今年暑假不AC所以一开始就在想这肯定是个变过型的复杂贪心,但是后来看了题解用了巨简单的做法,统计每个点被几个区间覆盖过,找最多的那个就是答案了 感觉这种做法和物理里的动能定理啥的有点像(也不太恰当)(其实就是忽略全部具体过程,只看结果(?))…
Problem - 1050 过两天要给12的讲贪心,于是就做一下水贪心练习练习. 代码如下: #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <set> #include <vector> using namespace std; typedef pair<int, int> PII; typed…
errors, clauses in place, logical ones, should be avoided. #include <cstdio> #include <cstring> #include <algorithm> int main() { //freopen("input.txt","r",stdin); const int CorNum=201; int ncase, npair, to,from, firs…
题意:你搬n个桌子,桌子从一个地方搬到另一个地方,走廊只允许同时一个桌子通过,教室分布在两边,奇数在一边,偶数在一边,当桌子不冲突时可以同时搬运,冲突时要等别的那个桌子搬完再搬. 思路:因为奇数桌子在偶数对面,当奇数时会与偶数冲突,直接把奇数+1,变成偶数就可以很简单判断出有没冲突,再判断那个位置冲突最多,就是最后的结果. #include<iostream> #include<cstdio> #include<cmath> #include<cstring>…
wa了5遍?!! (1)前4遍,思路没简化,企图模拟整个过程,但是调用sort函数时由于没有把奇数的屋子和偶数的屋子统一,排序出了问题. 思路:遍历n段,每次只扫未被标记过的一段,ans++并且从该段出发,访问到第n段,将所有和该段不重叠的段标记为1,ans不变. 代码: #include<bits/stdc++.h> using namespace std; #define maxn 500 #define rep(i,a,b) for(int i=(a);i<(b);i++) #de…
题意是在一个有 400 个房间的走廊中搬动房间里的椅子,如果两次的路线重叠,就要分两次搬动,如果不重叠,就可以一次搬动. 开始的时候直接当成求线段重叠条数的题,发现这种思路完全是错的,比如 1 - 3,2 - 4,3 - 5 这一组,只需搬动两次即可,但找重叠线段的话就会找到 3 条重叠线段. 然后打算直接模拟做,加入一点贪心的思路,用结构体数组存搬动要求,按椅子搬动的距离从小到大排序,扫描一边整个结构体数组,将搬动的路径标记, 若已经标记过,则 ++ans,注意 ans 的初值为 1,因为第一…
题意:在一个走廊两边都有对称分布的连续房间,现在有n张桌子需要从a移动到b房间.每次移动需要10分钟, 但是如果两次移动中需要经过相同的走廊位置,则不能同时进行,需要分开移动.最后求最少需要多长时间移动完所有的桌子. 析:这应该是一个贪心算法,时间尽量少,但是在一走廊如果相遇,必然是要分开的,所以说,我们只要统计, 统计在每个走廊的相遇的次数,然后再取最大值,如果最大值都成立了,那么其他的也会成立(想一下,为什么). 你想一下,假设有另一个走廊,次数比它少,即使他们的桌子不相同,而其他那些可以在…