自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

转载 欧拉函数

2014六月10原lightoj 1007 欧拉函数分类:模版--------------------数论(388)(0)公式推导转自:点击打开链接此题是关于欧拉函数的简单数论题,首先我们先来看看欧拉函数(也称 φ函数):            欧拉函数: 对于给定正整数 n ,少于或等于n的数中与n互质的

2017-03-16 13:14:37 323

转载 三个最短路算法Dijkstra's;floyd;SPFA

最短路径问题旨在寻找图中两节点之间的最短路径,常用的算法有以下四种。注意是把图处理成无向还是有向Dijkstra's (权值非负)1 Dijkstra's算法解决的是图中单个源点到其它顶点的最短路径。只能解决权值非负2 Dijkstral只能求出任意点到达源点的最短距离(不能求出任意两点之间的最短距离),同时适用于有向图和无向图,复杂度为O(n^2).3算法的过程: 1设置

2017-03-14 17:13:44 731

原创 Codeforces Round #377 (Div. 2) D 贪心+二分

题意: 在规定的时间内(n天)修m门课程,并给你日期安排,每天可能出现: 1.可以参加某一门课程的考试(考试耗时一天) 2.不能参加考试(可以复习一门学科或者休息) 现在给你每一门学科需要的复习时间,问是否可以在规定时间内通过所有考试,若能,输出最短时间 不能,输出-1 题解: 使用了贪心和二分思想, 贪心: 1.对于每一门学科,我们记录它最后的考试期限,这样可以有最多的复习时间

2016-10-18 19:05:55 282

原创 暑假解题报告

类别 集训中 集训后 总计 Codeforces 9 3 12 挑战 20 5 25 多校 2 1 3 合计 31 9 40CF篇 1)Educational Codeforces Round 15, problem: (C) Cellular Network题意: 几个城市,几个塔,在一条直线上,已知他们的坐标

2016-09-09 09:13:31 367

原创 POJ 2429 关于gcd和lcm的逆求

http://wenku.baidu.com/view/fbbed5a5f524ccbff12184af.html 讲两个算法的文档题意: 给你两个数的gcd和lcm,求他们的值 如果有多组解,输出他们值和最小的那组解 题解: 对lcm/gcd这个数字质因数分解,为了让他满足gcd和lcm不变,每一种质因数只能存在于一个数字,所以先分解质因数,但对于较大的数是不是质数的判断要用miller

2016-08-03 17:28:15 477

原创 并查集 AOJ 2170

题意: 有一个树,有些节点染色,每次有两种操作,第一,统计该节点到离它最近的染色父亲结点的的数值,第二,为某一个节点染色 题解: 直接记录了每一个节点的父亲节点,每一次搜索就计算到他的染色父亲结点为止#include <iostream>#include<stdio.h>#define MAX_N 100005using namespace std;typedef long long

2016-08-03 16:11:50 326

原创 并查集 POJ 1703

题意: 有两个帮派,给你A信息,让你输出这两人是不是一个帮派的;给你D信息,表示这俩人不是一个帮派的,给你A信息后,每次输出你的回答 题解: 又是简单的并查集,但是很坑的就是cin会超时,然后并不知道是不是cout和scanf这种出现了不可预知到错误,然后就是init少了一个,唉,这题还是应该注意编号啊,以后就直接按编号来,别没事都从0开始#include<iostream>#include

2016-08-03 11:36:29 265

原创 并查集 POJ 2236

题意: 有n台电脑,都是坏的,现在可以执行两种操作,修好某台电脑,判断俩电脑是否相连(可传递相连) 给你电脑坐标和最大相连距离(即电脑好的且小于等于这个距离,就表示相连) 题解: 很简单,建立并查集,还有isok数组,表示电脑是否ok,对于每一个O操作都要将所有和他相连的都uint#include<iostream>#include<stdio.h>#include<stdlib.h>

2016-08-03 11:30:25 231

原创 优先队列 POJ 2010

题意: 有个学校,从c个学生中挑n个学生,要求每个学生的资助金总和<=f 求符合条件的选择方案中中学生成绩中位数的最大值 题解: 有一个lower数组,记录当第i个人是中位数时候,前面的人所需要的资金的最小值,同理有一个upper数组 lower[i] = q.size() == half ? total : 0x3f3f3f3f; total是当前最小值if (q.size() >

2016-08-03 11:21:27 208

原创 优先队列 POJ 3614

题意: 有一些牛,每只只能涂大于等于a小于等于b spf的防晒霜, 现在我们有一些防晒霜,给出他的spf和量,求最多可以涂好多只牛 题解: 遍历每一个防晒霜,当牛的可能可以接受这个防晒霜时候,就加入队列,每次排头的是最小的那个,然后每次检测队列里面的值是不是符合要求,是就ans++,不是就再也找不出符合他的了,因为防晒霜也是从小到大spf排列的#include<iostream>#incl

2016-08-03 11:10:24 327

原创 贪心 POJ 3262

题意: 有n个牛在FJ的花园乱吃。 所以FJ要赶他们回牛棚。 每个牛在被赶走之前每秒吃Di个花朵。赶它回去FJ要花的时间是Ti。在被赶走的过程中牛就不能乱吃了 题解: 每次你赶走的都是当前情况下单位时间吃的最多的牛#include <iostream>#include <algorithm>#include <stdlib.h>#include <math.h>#include <

2016-08-03 10:47:52 269

原创 贪心 POJ 1862

题目大意:科学家发现一种奇怪的玩意,他们有重量weight,如果他们碰在一起,总重变成2*sqrt(m1*m2)。要求出最终的重量的最小值。 题解: 按照二元二次方程,当俩书越接近,所求的值越小#include <iostream>#include <algorithm>#include <stdlib.h>#include <math.h>#include <queue>#inclu

2016-08-03 10:43:08 157

原创 贪心 POJ 3040

题意: 你有N种硬币,每种若干个,硬币的面值是一种倍数关系,你每次取不少于c面值的硬币,问可以最多去几次 题解: 正是由于面值是一种倍数关系,贪心策略就是从大到小能取多少取多少但不能超过c,然后从小到大,能取多少取多少,直到刚好超过或等于c 用need数组来存在当前情况下的最优解,然后再重复找最优解,直到找不到。 if(sum>0){ break; }结束条件 min(cstr

2016-08-03 10:24:08 166

原创 贪心 POJ 1017

题意: 一个工厂制造的产品形状都是长方体盒子,它们的高度都是 h,长和宽都相等,一共有六个型号,分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6。 这些产品通常使用一个 6*6*h 的长方体箱子包装然后邮寄给客户。求至少要多少个箱子。 题解: 各种讨论,遍历所有可能性#include <iostream>#include <algorithm>#include <stdli

2016-08-03 10:03:22 150

原创 贪心 POJ 2393

题意: 你每周可以生产牛奶,每周生产的价格为Ci,每周需要上交的牛奶量Yi,你可以选择本周生产牛奶,也可选择提前几周生产出存储在仓库中(仓库无限大,而且保质期不考虑),每一周存仓库牛奶需要花费S元,让你求出所有周的需求量上交的最少花费。 题解: 决定你是否提前生产就是看单价,实际上对于每一次的比较只需要比较当前值和以前的最优解,如果比最优解小,那么此时他变成当前最优解。以此类推#include

2016-08-03 10:00:50 185

原创 贪心 POJ 3190

题意: 每一只奶牛要求在时间区间[A,B]内独享一个牛栏。问满足奶牛整个过程最少需要多少个牛栏。 题解: 在优先队列里面设为end最前的先输出,sort以begin的时间从小到大排序。 t数组是记录每一只牛的牛栏编号 如果c.end < cstr[i].begin则这个栏的牛的end时间要更新了。 否则加牛栏#include <iostream>#include <algorithm>

2016-08-02 23:46:42 162

原创 贪心 POJ 1328

题意:假设海岸线是一条无限延伸的直线。每一个小的岛屿是海洋上的一个点。雷达坐落于海岸线上,只能覆盖d距离,所以如果小岛能够被覆盖到的话,它们之间的距离最多为d。题目要求计算出能够覆盖给出的所有岛屿的最少雷达数目。 一目了然,求投影到X轴上,然后重叠位置只记一次,有两种情况:当此时的线段左端点大于此时比较的右端点,不会有重合了,更新;当当此时的线段右端点小于此时比较的右端点,范围更小了,更新比较

2016-08-02 23:34:35 146

原创 贪心 POJ 2376

题目: 给定一个时间T和N个时间区间,求最少需要多少个区间覆盖总区间[1,T],无法覆盖区域[1,T]时输出-1。 例如T=10,有3个区间[1,7],[3,6],[6,10],则最少需要两个区间来覆盖,选择区间1和区间3。 题解: 先给区域排序,起始点为1 的开始,遍历得到起始点为1,终点最远的位置,然后判断他是否有更新,没有就输出-1,直到end>=t输出。bool cmp(cow a,

2016-08-02 23:23:17 168

原创 Educational Codeforces Round 15, problem: (C) Cellular Network

题意: 几个城市,几个塔,在一条直线上,已知他们的坐标,每个城市至少在R这一范围内有一座塔的信号,求R得最小值 题解: 比较坑,自己YY的二指针,比赛的时候没有搞出来,颇为尴尬。几次遇到int爆数据的问题,以后记得改啊,没事别用int啊。 思路就是求每个城市到塔的最近距离求最大值,由于是不减数列,所以从第一个城市开始,找到离它最近的塔,那么之后的城市的最近的塔只会在后面出现,于是简化了复杂度

2016-08-02 22:51:51 180

原创 Educational Codeforces Round 15, problem: (B) Powers of Two

题意: 求两个数加起来是2的次方,这样的数对在数列中有多少组 题解: 爆搜直接over,做出来都有鬼,比较坑的是自己YY的log发生了莫名的错误,卡在第一组很久,颇为尴尬,正解是map,键值是数值,实值是该键值在数列中对应的个数,遍历直到2的32次方然后记录即可for(int i =1;i<32;i++){ ans+= mp[(1<<i)-x];} mp[x]++;#inclu

2016-08-02 22:33:12 195

原创 POJ 3050

题意:从一个起点,走5步,能组成几个六位数 题解: 用set直接排除重复项最easy,爆搜每一个起点dfs(int x,int y,int step,int s)if(step==5){ if(ansset.find(s)==ansset.end()){ ansset.insert(s); } return;}实际上并不需要判断,因为set不会装重复元素

2016-07-26 08:24:15 207

原创 POJ 2718

题意: 对于一个数列,我们将数字分成两堆,求可能的情况下,两堆数字组成的数的差的最小值,排除前导0 题解: 将给出的数列进行字典序排列,然后将每个部分的转化成数字做差比较,因为字典序,所以枚举了所有数字#include<iostream>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<queue>#defin

2016-07-26 08:18:47 218

原创 AOJ 0525 爆搜

题意: 一个地图,只有0,1,每次可以转换一行或者一列,使得一行或者一列的0和1值互换,求最多可以有多少个1 题解: 先对行爆搜,以为题中行数少,然后对每一列记录1的个数和0的个数,取较大值,其中使用了bitset简单的实现了转换bitset <10000> a[10];对于行的爆搜,使用了二进制转换从0到pow(2,r)-1,每个数的二进制数对应是否转换这一行#include<iostrea

2016-07-26 08:08:55 206

原创 AOJ 0121 bfs

题意: 对于一个4X2的方格,有7个方片对应1–7,一个空格对应0,移动使得方格从左到右从上到下依次是01234567,问最短步数 题解: 使用map,map有两个数,以第一个数作为排序的标准,以第二个数作为该map对应的值map <string, int> dp;对于每一次的移动,直接抽象到一行来,注意条件的判断int direction[4] = { 1, -1, 4, -4 };int

2016-07-26 08:00:52 184

原创 AOJ 0558 BFS

题意: 一个地图,需要先从起点到1再到2,,,,以此类推,问最短路程 题解: 明显最短路程就是bfs,每一次把起点和目的地换了,多次bfs 注意:输入地图时,可以使用如下方法,避免每一个字符输入时对‘\n’还要处理 cin>>h>>w>>n; getchar(); for(int i = 0;i<h;i++){ scanf("%s",&maze[i]);

2016-07-26 07:34:30 178

原创 AOJ 0033 DFS

题意:有一个数列,1-10,10个元素乱排,问是否可以将数列按顺序抽出元素组成新数列,使得新数列是递增的而且原数列剩下的数字也是递增的 题解: dfs,记录步数和当前两个新数列的末尾,如果可以放,就下一轮dfs,完全是模拟了题目的一个图形#include<iostream>#include<stdio.h>#include<stdlib.h>#include<string.h>#incl

2016-07-26 07:27:13 257

原创 Codeforces Round #364 (Div. 2), problem: (D) As Fast As Possible

题意: 一群人去一个地方,只有一辆车,已知人的速度,路程,车的速度,人数和每一次车的最大载客量,且每个人只能坐一次车。求最短到达时间。 题解: 人的行程分为走路和坐车,当且仅当走路的人和最后一批坐车的人同时到达时,时间最短,按照对称性,可以知道每一批人坐车和走路的时间都是一样的,所以最后是推公式得到坐车和走路的时间。#include <cstdio>#include <cstring>#i

2016-07-26 07:17:42 261

原创 Codeforces Round #364 (Div. 2), problem: (B) Cells Not Under Attack

题意: 给你一个地图。在其中安放炮塔。炮台可以打到与它同行同列的所有地方,求每一次安放一个炮台,剩余多少地方打不到题解: 每一次认为是减少了矩形的长和宽,对于安放的地方已有同行的炮台,则只是矩形长减一,对于安放的地方已有同列的炮台,则只是矩形宽减一。#include <cstdio>#include <cstring>#include <iostream>#include <algorit

2016-07-26 07:10:44 213

原创 2016.7.21 多校赛 1001(水题)

题意:已知一个n维向量,现在你找一个n维向量,向量每个元素都是a(a>=0),每个元素符号未知,求差向量长度的最小值。题解: 可以直接展开为一元二次函数,公式最值求解#include<iostream>#include<stdio.h>#include<stdlib.h>#include<string.h>#include<queue>#define pr(x) cout<<#x<<"

2016-07-21 16:46:20 247

原创 2016.7.21 多校赛 1009 (水题)

题意: 一个非增数列,数字范围[0,100],已知部分数字,求前两个数/总和的最大值 题解: 先记录已知数字,特判第一第二个,其他未知位置上,未知数字用后面最靠近它的已知数字赋值,后面没有已知数字,那么就让他是0 注意: 输出使用到__gcd()库函数,求最大公约数,在头文件#include<algorithm>中#include<iostream>#include<stdio.h>#

2016-07-21 16:38:41 154

原创 集训 Poj 3669 BFS

题意: 有个人去看流星雨,不料流星掉下来会砸毁上下左右中五个点。每个流星掉下的位置和时间都不同,人不能待在流星毁过的地方,人从0,0出发,每次人只能走上下左右中一步,求他是否能求小文青能否到安全的地方,如果能,最短的逃跑时间是多少?题解: 1.对地图初始化,流星破坏的地方设置成他的下落时间,其他地方设置成INF 2.struct里面记录坐标和时间,每一次的上下左右移动需要判断出界和时间加+1,

2016-07-21 16:30:30 141

原创 Codeforces Round #363 (Div. 2), problem: (C)

题意:一个人每天按照情况可以选择做事或者休息,但是他连续两天不做同一件事,这天能不能做某件事是受条件限制的,求休息的最短天数题解: dp,对于每一天的条件下的休息时间的变化是根据以前的来增长的。dp[105][3],列数用来表示每一天,行数0,1,2表示这天在0,1,2这三种情况对这一天的影响。 如果这一天是1,那么你只能选择做1或者休息,那么 dp[i][1] = min(dp[i-1][

2016-07-20 23:23:25 131

原创 Codeforces Round #363 (Div. 2), problem: (B)

题意:一个炸弹,可以消灭横竖所有墙,问是否能用一个boom消灭地图上所有墙题解:好吧,这个有点技巧,做法是计算每一列的墙数,存在sl[],计算每一排墙数,存在sh[]中。遍历每一个点,当这个点对应的sl[i]和sh[j]之和减去(这个点是否是墙)==墙数时,则这个点成立。(if(sh[i]+sl[j]-(maze[i][j]==’*’)==num))#include<iostream>#inclu

2016-07-20 22:56:23 116

原创 Codeforces Round #363 (Div. 2), problem: (A)

题意:就是一排粒子同时左右跑,求第一次相遇的时间。 题解:水的莫法,自己蠢的可以。只有在RL这个序列才有相遇的可能,然后计算每一次相遇时间去最小。需要注意n=1的情况。#include<iostream>#include<sstream>#include<string>#include<cstdlib>#include<vector>#include<map>#include<queu

2016-07-20 22:49:14 115

原创 集训 Poj 3009

题意: 地图上有起点和终点,你每次向四个方向移动冰球,知道它撞到障碍位置,且此时此障碍消失。注意:你必须有扔球的缓冲区域,即四个方向有一个是没有障碍物的,求是否可以到终点一个到终点的最小步数,大于10步就算不能到达,球在运动过程中不能出界。题解: 1.dfs包含3个参数 x,y,step,每一次for里面只会出现遇到1,遇到3,出界的情况,用是否出界来作为每一次dfs的结束条件while (ju

2016-07-20 22:32:52 151

原创 集训 Poj 1979

题意:一个地图,求从起点开始,可以到达的点的个数,其中有墙阻隔,默认有边界。题解:DFS,从起点开始,先替换这个点使之成为墙,然后四个方向进行搜索,知道没有点为止。注意:在输入地图时,应该注意加一个为止存放’\n’,所以第二层for要+1宽度;还有在输入地图规格时候注意加上getchar,以免后面混乱 (当输入的是数字地图时候,不需要加宽)#include<iostream>#include<s

2016-07-20 22:10:50 177

原创 集训——挑战(P18,Poj NO.1852)

题意: n只蚂蚁在直杆上行走,杆末端掉下。已知杆长和行进速度和蚂蚁初始位置,未知蚂蚁朝向。蚂蚁相遇则相互掉头,求最后一只蚂蚁掉下杆的最小最大可能时间。题解:最需要理解的就是相遇时候,是一种角色互换 可以理解为:相遇时,蚂蚁走了与之相遇的蚂蚁的本应该走的路。 所以最短时间是最靠近中点的蚂蚁,行走到离较近杆末端的时间 最长时间是最靠近边缘的蚂蚁,行走到离较远杆末端的时间#incl

2016-07-18 11:26:56 183

原创 SCUACM 2016集训 7.15 N

题目:链接思路: gg,这个题比较水,思路就是判断是不是有且只有一个0 当然n=1是直接判断#include<iostream>using namespace std;int main(){ int n; cin>>n; int str[1005]; int ok=0; for(int i=1;i<=n;i++){ cin>>str[i

2016-07-18 10:16:50 303

原创 Codeforces Round #201 (Div. 2)C——数论

C: 题意: A 和 B玩游戏,A每次先手,游戏规则:在一个集合中找到两个数,他们的差绝对值不在集合中,则添加到集合里。如果无法选择了,那个人就是输了。 题解: 模拟不可能,这题找规律。 好吧,证明下面的结论也是无力。 所有初始数的最大公约数gcd,集合={1*gcd,2*gcd,…k*gcd≤max}max=⁡所有初始数的最大值。int gcd(int a, int b) {

2016-05-10 21:48:54 286

原创 Codeforces Round #201 (Div. 2)A、B

A:水题 题意: 一个排列,它的值为: (x1 - x2) + (x2 - x3) + … + (xn - 1 - xn)。 输出排列使得他的值最大,且其余元素按字典序最小排列。题解: 水题果然是水题,Excuse me?最大数在头,最小数在尾,先降序sort一下,其余sort再一下。#include<iostream>#include<cstdio>#include<cmath>#

2016-05-10 21:33:52 219

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除