HDU 4324 Contest 3】的更多相关文章

直接DFS即可 #include <iostream> #include <string.h> #include <algorithm> #include <cstdio> using namespace std; bool vis[2010]; char map[2010][2010]; struct e{ int u,v; int next; }edge[2050000]; int head[2010],tot; void addedge(int u,i…
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4324 Triangle LOVE Description Recently, scientists find that there is love between any of two people. For example, between A and B, if A don’t love B, then B must love A, vice versa. And there is no pos…
Problem Description In the ACM International Collegiate Programming Contest, each team consist of three students. And the teams are given 5 hours to solve between 8 and 12 programming problems.  On Mars, there is programming contest, too. Each team c…
意甲冠军:N个人M通过主打歌有自己的期望,每个问题发送人玩.它不能超过随机播放的次数1,追求最大业绩预期 (1 ≤ N ≤ 10,1 ≤ M ≤ 1000). 主题链接:pid=5045" target="_blank">http://acm.hdu.edu.cn/showproblem.php?pid=5045 -->>设dp[i][j]表示已出战了前i - 1道题目,已出战的人的状态序列为j,如今要做第i道题目的最大期望.则最后要求的结果为max{dp[…
Contest Problem Description In the ACM International Collegiate Programming Contest, each team consist of three students. And the teams are given 5 hours to solve between 8 and 12 programming problems. On Mars, there is programming contest, too. Each…
Triangle LOVE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1707    Accepted Submission(s): 729 Problem Description Recently, scientists find that there is love between any of two people. For…
Coding Contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2653    Accepted Submission(s): 579 Problem Description A coding contest will be held in this university, in a huge playground. The…
题意:给出一堆人的喜爱关系,判断有没有三角恋-_-|| 其实就是判断是否存在三条边的环. 一开始我是这么想的: 先拓扑排序,如果没有环那就直接No 如果有环?挑出环里的任意一个点(拓扑排序结束后不在拓扑序里面的点就在环里),然后从这个点开始dfs,看三步之后能不能回到这个点.(可以证明,只要考察一个点就行) 然而TLE了= = 其实仔细想想可以发现,后面那个dfs没有必要. 注意一个细节:A[i][j]<>A[j][i].也就是说若i到j不通,那么j到i一定通 可以证明,若这样的图中存在环,那…
因为题目说了,两个人之间总有一个人喜欢另一个人,而且不会有两个人互相喜欢.所以只要所给的图中有一个环,那么一定存在一个三元环. 所以用拓扑排序判断一下图中是否有环就行了. #include <cstdio> #include <cstring> + ; char G[maxn][maxn]; int c[maxn]; int n; bool dfs(int u) { c[u] = -; ; v < n; v++) ') { ) return false; if(!c[v] &…
题目 /***************************参考自****************************/ http://www.cnblogs.com/newpanderking/archive/2012/10/16/2726757.html 上有详细注解,我是看了之后写的,我的代码有一咪咪的改动 //这是一道典型的拓扑排序的题,刚开始时没有理解,//上网查了好多关于拓扑排序的知识才明白,//就是针对一个顶点活动网(Activity On Vertex network),简…
题解:我们使用一个二位数组dp[i][j]记录进行到第i个任务时,人组合为j时的最大和(这里的j我们用二进制的每位相应一个人). 详细见代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; typedef long long ll; double s[11][1010]; double dp[1010][1050];…
Problem Description Recently, scientists find that there is love between any of two people. For example, between A and B, if A don't love B, then B must love A, vice versa. And there is no possibility that two people love each other, what a crazy wor…
pid=5045">主题链接~~> 做题感悟:比赛时这题后来才写的,有点小尴尬.两个人商议着写写了非常久才写出来,I want to Powerful ,I believe me . 解题思路: 遗憾 ! 感觉领悟能力太低 .由于随意时刻随意两个人做的题不超过 1 题 ,so~>  必须是一轮一轮的来(n 道题一轮),每一个人在一轮中仅仅能做一题.假设多做一题就,有可能某个人没选,某个人选择了两道,这样就不符合规定了 . 用 1  代表选择.0  代表没选择.进行某一行的时候就…
https://vjudge.net/problem/HDU-4324 题意 每组数据一个n表示n个人,接下n*n的矩阵表示这些人之间的关系,输入一定满足若A不喜欢B则B一定喜欢A,且不会出现A和B相互喜欢的情况,问你这些人中是否存在三角恋. 分析 就是求是否存在三元环.判断图是否存在环,可以使用拓扑排序,排序失败则有环.那么如何判断存在的环是三元环呢? 假设现在存在n元环,在环上有这样相邻的三个元素x-->y-->z.如果是z-->x,那么存在三元环:否则,必存在x-->z,那此…
利用降幂公式..呃,还是自己去搜题解吧.知道降幂公式后,就不难了. #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #define LL unsigned long long using namespace std; bool mod[100005]; LL PHI(LL P){ LL ret=1; for(LL i=2;i*i<=P;i++)…
树状数组,主要是抓住要求连续1的个数.这样,初始时,相同的加1,不同的加0. 查询时,用二分搜索右边界.就是比较当前mid-l+1的值与他们之间1的个数(这可以通过树状数组求区间和得出),记录右边界即可. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <string.h> #define lowbit(x) ((x)&a…
本来以为是一道水题,好吧,做了才知道,出题的人有多牛.二分搜索是不可能的了,因为会超内存... 看到别人的搜索两个集合的提示,我就自己一边去想了.终于想出来了: 可以这样做,先把每两个集合的和值枚举出来并成一个大集合,排序,去重.剩下一个集合,于是,共三个集合. 枚举小的那个集合的元素,搜索两个大的集合.可以这样做,定义一个初始为指向最小元素的指针,一个指向最大元素的指针(两个指针是指向不同的集合的),两者之和相等则返回,小于则移动小指针+1,否则移动大指针-1.直至二者相等退出.然后再用两个指…
一开始就想到了扩展KMP,因为只有扩展KMP才是处理后缀的.但忽然短路以为扩展KMP求的是最长公共后缀,囧....又浪费了很多时间,都是对这个算法练得不多 再看那个扩展KMP算法之后,就很确定要的就是这个算法了.嗯,如果直接用扩展KMP,是会超时的.后来看了别人一个很巧妙的处理,把一个串复制一下两个串拼起来,再求扩展KMP.天才的做法啊... 还需要考虑一个问题,就是判重.这个真心不懂,总觉得和循环有点关系,但却想不到什么好方法.好吧,其实这个算法我也懂的,但很久没用过了,用KMP求循环节.当这…
顶好的一道题.其实,是POJ 2411的升级版.但POJ 2411我用的插头DP来做,一时没想到那道题怎么用状态DP,于是回头看POJ 2411那一道的状态DP,其实也很简单,就是每一行都设一个状态,用位来表示,如果上一行为0,则当前行必定是要竖着放的.填1.否则,当前行的位置可以横放填两个格子为1,也可以不放,为0.于是,看上一行的状态能转移到哪些状态,就可以了. 这一道也是一样的想做法,DFS看开始时有哪些状态,记在一个一维矩阵里.因为有一些状态最开始是达不到的,如奇数个1,或者一些不连续1…
一个很直观的想法是,求出每个点上下左右能到达的最大长度.然后枚举其斜边...没想到过了.... 当然,题解有一个很巧妙的优化,利用树状数组,那个太巧妙了. #include<iostream> #include<cmath> #include<cstdio> #include<vector> #include<cstring> #include<algorithm> using namespace std; int t,T,ans,s…
三个摄像头,在XOY上与立体的点求出在平面上的交点,然后求出凸包.三个凸包相交的面积即是所求,即是可以用半平面交的方法求解了. 模板题了.代码拿别人的. #include<cmath> #include<cstdio> #include<iostream> #include<algorithm> using namespace std; const int mm=111; typedef double DIY; struct point { DIY x,y;…
悬线法可解,稍有点烦琐. #include <iostream> #include <cstdio> #include <cstring> #include <string.h> using namespace std; char map[1010][1010]; int lefts[1010][1010],heights[1010][1010],rights[1010][1010]; int CountSingle(int n,int m,char sin…
果然换个编译器就过了.总的来说,不难,不过就是处理一些空格.学习了一个新的类 istringstream可以按空格划分.然后,那条式子要理解. 式子的意义是: 找到一个串,该串在query中是第几个找到/它的实际位置.之和再除以给出的有几个串就是AVEP #include <iostream> #include <cstdio> #include <sstream> #include <map> #include <string> #includ…
http://www.cnblogs.com/staginner/archive/2012/08/13/2636826.html 自己看过后两周吧,重新写了一遍.很受启发的.对于0.1,可以使用最小割的思想来做,以前有听说过0.1规划的问题,估计就是这样的了.对这个题目使用最小割 ,是一个非常巧妙的思想. 我把别人的题解复制过来吧. 从本质上讲,之所以能够用最大流解决这个问题,关键在于最大流可以求解下面这个函数的最小值: 接下来就分析一下如何用最大流求解上面这个函数的极值. 首先xi一共只有两种…
很明显的区间加减单点查询.但由于规模大,于是离散化.在离散化的时候,可以把要查询的点也加入离散化的数组中. #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #define lowbit(x) ((x)&(-x)) #define LL __int64 using namespace std; int tpoint[400010]; int sa…
编辑距离,经典的了.动态规划枚举即过. #include <iostream> #include <cstdio> #include <string.h> #include <algorithm> using namespace std; char bgn[1505][15]; char tmp[15]; int dp[15]; int main(){ int T,n,m,kase=0,e,cnt,pre,tpre; scanf("%d"…
题意:给定a和b,n,让你求b+a, b+2*a, .......b+n*a里面有多少1. 当统计第K位的时候 可以注意到 第 B+T*A 和 B+(T+2^(K+1))*A 位是相同的 那么 第K位的时候 只需要统计2^(K + 1)  - 1次就可以了 当统计第K位的时候 可以注意到 连续的 (2^K)/A都是连续的0 或者连续的1 所以可以考虑直接连续记录(2^K)/A个结果. 那么 第K位的时候 只需要统计N / ((2^K)/A)次就可以了 那么 第K位的时候 只需要统计 2^K/((…
只需A的全部质因数包含在B中即可. #include <iostream> #include <cstdio> #define LL __int64 #include <algorithm> using namespace std; LL gcd(LL a,LL b){ if (b==0) return a; return gcd(b,a%b); } int main(){ int T,kase=0; LL A,B; scanf("%d",&…
可以知道,逃出的人中,最后一个应当是A+B最长的,这是很容易发现的.那么,最选逃出去的必定是A+B最短的.这符合最优. 于是,可以把各小矮人按A+B的和由大到小排序.定义DP[i][j]为i个人中逃出了j个人至少需要“之前”的留在井中的未逃出去的小矮人的高度和.注意这个值是可以为负数的,是负数,则证明需要之前有人留下,这些i个人足可以把j个人送出去. 那么,有DP[i][j]=min{dp[i-1][j]-a[i],max(dp[i-1][j-1],H-sumA[i]-b[i])}. 解释一下递…
很明显的树形DP了.但网上有的说可以用并查集.... 考虑一棵子树,当根结点有机器人时,则必定所有子树都要和根结点断开,而根结点向上返回的路径值则为其父结点与根结点连边的权值. 当根结点安全时,假设其子树有K个危险结点,而由于K个结点需要两两不能相连,那么,至少断开K-1个结点.则把权值最小的K-1断开即可.而剩下的那个结点与根结点的边权值则返上至上一层.这时,相当于K-1个结点都从树中剪去,变成了一条单路径的树了吧,则若要断开剩下的结点与其他点的通路(假设要与祖父结点断开),则必定是要断开剩下…