ACM
文章平均质量分 72
booyoungxu
这个作者很懒,什么都没留下…
展开
-
hdu 1232 畅通工程(求最少多少条边可以使所有点联通)
题目地址题目大意:给出点及边,点按1到n编号,求最少需要多少条边可以将所有的点联通解题思路:并查集求有多少个根节点,减一即为答案#include using namespace std;const int maxn = 1000+100;int par[maxn];int Find(int x){ return x==par[x] ? x : Find(pa原创 2015-10-31 10:42:08 · 319 阅读 · 0 评论 -
TSP问题
问题描述:设有n个城市,其中每2个城市之间有道路相连,从某城市出发周游所有城市,经过每个城市一次仅且一次,最后回到出发城市,求总行程最短的周游路线。建模:阶段k:已经历过的城市个数,包括当前所在的城市(k=1,2,......,n)k=1时表示出发时位于起点;k=n+1时,表示结束时回到终点。状态变量:Xk=(i,Sk),其中i表示当前所在的城市,Sk表示尚未访问过的城市的集合。原创 2015-11-23 11:49:59 · 520 阅读 · 0 评论 -
hdu 2612 Find a way(广搜)
题目地址题目大意:给出nXm的字符矩阵,有多个‘@’,一个‘Y’,一个‘M’,‘.’可以走,‘#’不可以走,求Y和M同时到一个@的最小步数*11解题思路:搜索Y和M到每一个@#include using namespace std;const int maxn = 210;const int INF = 0xfffffff;const int dx[] = {-1,1,0,原创 2015-11-04 20:49:18 · 264 阅读 · 0 评论 -
2015 沈阳站 hdu 5521 Meeting(Dij最短路枚举)
题目地址题目大意:有N个点,两个人,其中一个人住在点1,另一个人住在点n 。有M个点集,集合内的数表示任意两点的距离为dis ,现在问,如果两个人要见面,需要最短距离是多少,有哪几个点能被当成见面点解题思路:分别对两个点进行最短路,但是不能直接最短路,这里有一个问题是,边太多了 ,其实也不会很多,每个点集只能被松弛一次,因为里面所有的点已经是最短的状态了,存图的时候注意,存一下每个点所关联原创 2015-11-04 17:07:16 · 395 阅读 · 0 评论 -
hdu 2063 过山车(Hopcroft-Carp求二分匹配)
题目地址题目大意:告诉组合数,男生人数,女生人数,求最多有多少人能去解题思路:裸做大二分匹配#include #include #include #include using namespace std;const int maxn=1100;const int INF=0xffffff;int g[maxn][maxn],Mx[maxn],My[maxn],Nx,N原创 2015-11-04 14:01:18 · 325 阅读 · 0 评论 -
poj 3463 Sightseeing(dij求最短路+次短路(比最短路长1)的总走法)
题目地址题目大意:给出n个点及m条边,求最短路+次短路的走法总数,次短路比最短路长1解题思路:我们用一个数组记录最短路,一个数组记录次短路。每次对当前最短边,先更新最短路,更新不了最短路再更新次短路。每条边处理两次,这样就可以在2n×n的复杂度内求得最短路和次短路了。#include#include#include#include#define inf 20000000原创 2015-11-03 16:24:16 · 562 阅读 · 0 评论 -
hdu 1385 Minimum Transport Cost(floyd打印最小字典序的最短路径)
题目地址题目大意:以矩阵的形式输入点边关系,-1代表没边,且通过点需要交费,求总花销最小,如果有多种最短路,打印字典序最小的那种解题思路:floyd,path[i][j]表示i到j的最短路在i之后的最小字典序的点编号,更新的时候加上边相等的时候再更新一下点的字典序#include #include using namespace std;const int INF =原创 2015-11-03 15:56:46 · 456 阅读 · 0 评论 -
hdu 1874 畅通工程续(最短路Dij邻接表)
题目地址题目大意:给出n个点m条边,并给出起点和终点,求起点到终点的最短路解题思路:1.没有负边权 2.复杂度mlg(n)(n为点的个数,m为边的条数) 3.起点固定,不断更新终点,若要输出路径,则需要逆序输出 4.适用于有向图和无向图 5原创 2015-11-03 14:35:48 · 416 阅读 · 0 评论 -
hdu 1874 畅通工程续(最短路Dij邻接矩阵)
题目地址题目大意:给出n个点m条边,并给出起点和终点,求起点到终点的最短路解题思路:1.没有负边权 2.复杂度n^2(n为点的个数) 3.起点固定,不断更新终点,若要输出路径,则需要逆序输出 4.适用于有向图和无向图#include #include #原创 2015-11-03 14:29:59 · 297 阅读 · 0 评论 -
ccpc Sudoku(搜索)
题目地址题目大意:输入为由1到4和’*‘组成的4X4的字符矩阵,要求将’*‘处填上数字,使得每行、每列、四角的4个2X2的小方格为1、2、3、4各一个数字解题思路:将需要填数的位置记录下来,对于每个点一个数字一个数字的试探搜索#include using namespace std;typedef pair pi;vector v;char maze[5][5];int原创 2015-11-02 13:09:18 · 314 阅读 · 0 评论 -
ccpc Pick The Sticks(dp特殊处理)
题目地址题目大意:给出n根筷子的长度和价值,最多可以装在一个长l的容器中,相邻筷子之间不允许重叠,且两边上的筷子,可以伸一半的长度在容器外,求最大价值量解题思路:初看一眼就是01背包,没错就是01背包,但是有个特殊的地方需要处理,就是容器2边的筷子,将容器的长度X2,筷子的长度X2,那么相当于每根筷子的价值,可以被放0,1,2次,再加一层循环来枚举放筷子的价值量#include u原创 2015-11-02 12:08:53 · 940 阅读 · 0 评论 -
hdu 1116 Play on Words(并查集求是否所有在一集合里)
题目地址题目大意:给出n个单词,每个单词的尾字母可以和其他单词的头字母相连,问是否所有单词可以连接成一条线(包括形成环),但不能分叉解题思路:首先用并查集求出根的数目,再用每个字母入度和出度的情况来判断是否为全部连接成一条线#include using namespace std;char s[1100];int in[30],out[30],exist[30],par[30原创 2015-10-31 10:37:38 · 303 阅读 · 0 评论 -
poj 3468 A Simple Problem with Integers(线段树区间更新求和)
题目地址题目大意:给出n长度的数组"C a b c" means adding c to each of Aa, Aa+1, ... , Ab. -10000 ≤ c ≤ 10000."Q a b" means querying the sum of Aa, Aa+1, ... , Ab.解题思路:裸线段树区间更新并求和,注意用long long#include #inclu原创 2015-10-31 10:28:36 · 276 阅读 · 0 评论 -
hdu 3333 Turing Tree(线段树求区间内不同值之和+离线处理)
题目地址题目大意:给出n个值及m个区间和查询,求区间内所有不同的值之和解题思路:先建立一颗空线段树,在每次更新的时候在求其值,特殊处理:先将所有查询按照右区间从小到大排序,对于排序后的每次查询做更新操作,用map标记值出现的次数,若出现次数为多次,则更新减之,保证该数只加过一次,注意区间和会很大#include using namespace std;const int max原创 2015-10-29 16:34:34 · 327 阅读 · 0 评论 -
hdu 1754 I Hate It(线段树单点更新(a位置的值变成b)+区间求最值)
题目地址题目大意:有两个正整数 N 和 M ( 0第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩。接下来有M行。每一行有一个字符 C (只取'Q'或'U') ,和两个正整数A,B。当C为'Q'的时候,表示这是一条询问操作,它询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少。当C为'U'的时候,表示这是一条更新操作,要求把ID为A的学原创 2015-10-29 16:26:51 · 324 阅读 · 0 评论 -
2012杭州站B - Stealing Harry Potter's Precious(搜索+下一排列)
题目地址题目大意:给出一个n*m的字符数组,'@'表示起点,'.'表示可以走,'#'表示不能走,再给出p个点的坐标,若p(p解题思路:先搜索求出任意2个需要到达点之间的最少步数(包括起点),再用下一排列找路径并求其步数,比较选择最小步数即可#include using namespace std;const int maxn = 100+10;const int INF =原创 2015-10-25 13:35:01 · 444 阅读 · 0 评论 -
2013杭州站C - Zhuge Liang's Password(模拟)
题目地址题目大意:给出n及2个n*n的数组,求对其中一个数组进行旋转0度,90度,180度,或者270度,2个数组同位置的相同元素最多有多少个解题思路:纯模拟,比较求最大#include using namespace std;const int N = 35;int a[N][N],b[N][N];int main(){ int n,m; while(原创 2015-10-25 13:24:37 · 313 阅读 · 0 评论 -
Codeforces Round #312 (Div. 2) B. Amr and The Large Array
题目地址题目大意:给一个有n个元素的数组,求数组中出现次数最多的元素的位置区间,若有多个元素出现次数相同且最多,则输出区间长度最短的左边位置和右边位置解题思路:记录每个数出现的次数及其左右位置,先按次数排序,再按区间长度排序,问题在于有些数存在,有些数不存在,但是我们只需要输出出现次数最多并且区间最短数的最先出现位置和最后出现位置,用一个map来解决有些数不存在的情况,将数组元素映射成连续原创 2015-10-25 12:59:47 · 382 阅读 · 0 评论 -
Codeforces Round #312 (Div. 2) A. Lala Land and Apple Trees(模拟)
题目地址题目大意:给出n个位置,以及每个位置上有的苹果数目,人初始在位置0,拿到苹果之后便反向,问最多能拿到的苹果数目解题思路:对n个位置排序,取正负方向位置个数的最小值,值小的那个方向的苹果全取完,值大的那个方向的苹果取靠近0位置的前 2方向最小值+1#include using namespace std;const int maxn = 100;struct P{原创 2015-10-25 12:49:18 · 286 阅读 · 0 评论 -
Ignatius and the Princess III(母函数)
题目地址题目大意:给出数n,求由比数n相加的和为n的加法的种类,每个数可用多次,交换顺序为同一种加法解题思路:母函数模板G( x ) = (1 + x + x^2 +····) * ( 1 + x^2 + x^4 + ····) * ( 1 + x^3 + x^6+....)*......#include using namespace std;const int ma原创 2015-10-20 15:00:29 · 347 阅读 · 0 评论 -
2014鞍山站 D - Galaxy(数论+贪心)
题目地址题目大意:给出n,k(n解题思路:首先判断n是否严格大于k,若大于,则本题相当于求(Xi-X均)^2之和最小,要求得最小值贪心舍掉连续k个点令sum为Xi的和,m为留下的Xi的个数,则X均 = sum/m(Xi-X均)^2 = Xi^2+m*X均^2-2*Xi*X均m个数的(Xi-X均)^2 为 ( X1^2+X2^2+......+Xm^2)+m*(sum/m)*(s原创 2015-10-08 16:57:54 · 517 阅读 · 0 评论 -
2014acm亚洲赛总结
广州站:A题(Y),暴力,STLB题(Y),几何,暴力,题意理解+想法C题(N),字符串,很难D题(~),几何,模板多边形与圆相交E题(Y),模拟,题意理解F题(N),复杂情景问题,理解题意就很困难G题(N),数论,很难H题(N),几何,很难推理+模板I题(Y),贪心+几何,贪心策略J题(N),数论推理or图论,很难K题(Y),最短路、暴力,题意细节原创 2015-10-06 10:37:50 · 339 阅读 · 0 评论 -
2014广州站 I - Little Zu Chongzhi's Triangles(贪心)
题目地址题目大意:给定n(3=解题思路:大边构成的三角形面积最大,所以将木棍长度按照从大到小排序,大的优先构成三角形,求满足的面积之和即可#include using namespace std;double a[100];bool cmp(double a,double b){ return a>b;}int main(){ int n;原创 2015-10-04 19:56:51 · 401 阅读 · 0 评论 -
2014广州站 E - Song Jiang's rank list(模拟)
题目地址题目大意:给出N个英雄,每个英雄有自己的名字和杀敌人的个数,现在给这些英雄排名,首先按杀敌人的个数多少排名,杀敌人越多,排名越靠前,如果杀敌人个数相同,那么名字字母序小的排名靠前。给定n个英雄的名字和杀敌人的个数,首先按排名输出英雄的名字以及杀敌人个数,然后有q个询问,每个询问包括一个英雄的名字,然后输出该英雄的主排名和次排名,主排名意思是比该英雄杀敌人个数多的英雄个数+1,次排名意思原创 2015-10-04 19:50:53 · 360 阅读 · 0 评论 -
喷水装置(二)(最小线段覆盖)
题目地址题目大意:有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n解题思路:先将没用的装置(半径#include #include #include #include #include #include #include #include #include #include #include using namespace std;c原创 2015-09-12 12:21:03 · 851 阅读 · 0 评论 -
poj 2454 Jersey Politics(贪心+随机化)
题目地址题目大意:有3*k个数(1----3*k),代表3*k个城市,每个城市总共有1000票,给出3*k个数代表X在每个城市能得到的票数,将其均分成3份,使得至少有2份中X能得到过半的票数,要求输出每份的城市编号解题思路:要求至少有2份的票数之和过总和的一半,即求2份中票数之和大于500*k(每个城市总票数为1000),则要使得票数和尽可能多,先贪心将最小的k个数筛掉,再用随机化将剩余的原创 2015-08-06 11:05:13 · 520 阅读 · 0 评论 -
Codeforces Round #320 (Div. 1) [Bayan Thanks-Round] B "Or" Game
题目地址题目大意:给出n,k,x及n个数,可以对n个数中的某些数进行总共k次乘以x的操作,求最大的结果解题思路:将k次操作乘到某个数上会使得结果最大,因为2#include using namespace std;const int maxn = 2e5+100;__int64 a[maxn],l[maxn],r[maxn];int main(){原创 2015-09-23 19:11:32 · 375 阅读 · 0 评论 -
hdu 1147 Pick-up sticks(求是否有交点)
题目地址题目大意:按顺序给出n条线段的端点坐标,判断每条坐标是否在线段堆的最上面,按输入顺序输出在最上端的线段的编号解题思路:顺序判断该条线段与之后输入的线段是否有交点#include #include #include #include #include #include #include #include #include #i原创 2015-09-21 22:43:17 · 369 阅读 · 0 评论 -
hdu 1115 Lifting the Stone
题目地址题目大意:给定n个点的坐标,求n边形的重心解题思路:选定任意一点作为定点(坐标原点)为每个三角形的一个顶点,将n边形分成n个三角形,n边形的重心=(每个三角形的重心*每个三角形的面积)/面积和#include #include #include #include #include #include #include #include #include #inc原创 2015-09-17 23:08:31 · 245 阅读 · 0 评论 -
zoj 1648 Grandpa's Estate(判断线段是否相交(不考虑端点相交))
题目地址题目大意:给出n及n条线段的2个端点坐标,求是否有线段相交(不考虑端点相交)解题思路:用差积判断线段的起点与另一线段的2个端点分别构成的向量是否分别在该线段向量的2边#include #include #include #include #include #include #include #include #include #include using原创 2015-04-23 15:50:07 · 717 阅读 · 0 评论 -
zoj 1597 Circular Area(求两圆相交的面积)
题目地址题目大意:给出2圆的圆心坐标及半径,求相交部分的面积。解题思路:分情况讨论相离,包含,及相交关系。相交时用四边形面积-2扇形面积之和#include #include #include #include #include #include #include #include #include #include using namespace std;c原创 2015-04-23 12:08:39 · 418 阅读 · 0 评论 -
zoj 1560 Hansel and Grethel(求两条直线的交点)
题目地址题目大意:给出2个点及其各自夹角,求2条直线的交点解题思路:数学公式推导,用tan()求斜率时要将角度转换成弧度#include #include #include #include #include #include #include #include #include #include using namespace std;const doubl原创 2015-04-23 11:19:09 · 462 阅读 · 0 评论 -
Codeforces Round #315 (Div. 2)
题目地址A. Music题目大意:题目一共给了3个数---- T 表示歌曲的长度(s)、S 表示下载了歌曲的S后开始第一次播放(也就是说S秒的歌曲是事先下载好的)、q 表示下载速度(每秒下载歌曲(q-1)/q秒)。问题就是播放的速度比下载的速度快,每当播放到没下载的位置,就会重新从头播放,输出的就是从头播放的次数(包括第一次)。解题思路:数学知识推公式#include #原创 2015-08-27 13:11:45 · 256 阅读 · 0 评论 -
Codeforces Round #Pi (Div. 2)
题目地址A. Lineland Mail题目大意:升序给出n个数,输出每个数与其他数相差的最小值与最大值解题思路:每个数的最小数为该数与相邻2个数的最小差值,最大数为该数与第一个数和最后一个数的最大差值,注意第一个数和最后一个数的处理#include #include #include #include #include #include #include #incl原创 2015-08-13 23:11:04 · 276 阅读 · 0 评论 -
2015暑假第三次积分赛
题目地址A Alphabet Cookies题目大意:输入2个字符串,能否在第一个字符串中找到字符组成第二个字符串,字符串全大写解题思路:水~#include #include #include #include #include #include #include #include #include #include #include using name原创 2015-08-08 10:05:55 · 397 阅读 · 0 评论 -
2015暑假第一次积分赛
题目地址A Little Keng(快速求幂)题目大意:计算1n + 2n + 3n + ... + mn 的值的末尾有多少个0,其中(1 解题思路:看到mn翻书找数论的知识,发现和快速求幂很像,想了一下那个mod应该是不能超过int,就用了平时最喜欢用的1000000000,具体原因不知道,直接套用了模板#include #include #include #inc原创 2015-07-31 20:27:27 · 439 阅读 · 0 评论 -
单色三角形问题结论
问题模型:空间里有n个点,任意三点不共线。每两个点之间都用红色或者黑色线段链接。如果一个三角形的三条边同色,责成这个三角形是单色三角形。对于给定的红色线段列表,找出单色三角形的个数。分析:如果直接找需要枚举所有的三个点的组合,有C(n,3)种组合,当n比较大的时候,需要枚举的组合很多,复杂度为O(n3);但是在遍历每个点的时候都可以枚举颜色不同的两条边。则每个点上不同的颜色的三角形有R*B,R原创 2015-10-12 10:41:09 · 1276 阅读 · 0 评论 -
方法总结
1.求使得最小值最大的值,二分查找(枚举)原创 2015-10-08 14:47:09 · 232 阅读 · 0 评论 -
比赛要点
1.输入很多组字符串时,计算每组字符串的长度一定不能在for循环中计算,很耗时2.当字符串赋值用的是字符数组赋值时,但要将其当做字符串用时,一定要在字符数组末尾加上‘\0’原创 2015-09-14 11:57:09 · 276 阅读 · 0 评论 -
C++字符串排序
跟数组排序大同小异按字典序从小到大排序#include #include #include #include #include #include #include #include using namespace std;int main(){ string s[10]; for(int i=0;i<5;i++) cin>>s[i];原创 2015-08-06 09:12:30 · 4968 阅读 · 0 评论