自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 PAT 1054

#include#includeusing namespace std;#define maxn 810int N,M;//int arr[maxn][maxn];char ss[30];mapt;int main(){ cin>>M>>N; int maxx=0; t[maxx]=0; int temp; for(int i=1;i<=N;i++) { for(

2016-01-23 21:46:57 445

原创 Codeforces Round#225 div.2E Propagating tree 线段树

题意:给你一颗树,现在有两个操作:1 x val:代表着对节点x进行加val,那么他的孩子节点-val,他的孙子节点+val,依次类推2 x:代表着你要打印这个节点的值。思路:线段树区间更新,单点查询。对于每一个节点,都会有一个对应的控制区间,我们首先DFS一把,找到每个点的控制区间,并且DFS的时候顺便把每一个节点处于什么层次顺便一起记下来。对于该题,我们建立两颗线段树,一颗

2015-11-28 16:01:23 369

原创 Codeforces Round#328 div.2 C

题意:有两个机器人,走路的速度是一样的,一个机器人一步走w米,一个机器人一步走b米,现在给出的赛道长最大为t,问在这些长度中,选择哪些长度会导致平局。需要注意的是,如果此时机器人的下一步将会超过剩余赛道长度,那么机器人就不会走这一步。而所谓胜局的情况是在没有平局的情况下,谁离起点最远谁就是赢家。思路:首先这道题千万不要被速度给搞晕了,即使速度一样,那么频率也有可能不一样。这时候直接看步

2015-11-07 10:50:07 443

原创 PAT Advanced 1074

题意:给你任意长度的链表,再给你一个长度K,需要你对这个链表每一个长度为K的都进行反转。思路:模拟题,然而依旧卡了我很久,第一次错的原因在于没有没看清英文,只做了一次反转,第二次是因为front那里没有添加上“+”号,所以卡了我好久。贡献几组我自己出的数据(不要问为什么不凑够5位)1 8 21 1 22 2 33 3 44 4 55 5 66 6 7

2015-11-07 10:37:57 374

原创 PAT Advanced 1014

队列的模拟题我采用的做法,先将人能插进队列的就先插进队列,然后从中找到此时最小的花费,然后弹出队列,加入新的人。我一开始的时候错了两个测试的地方,第一个,并不是17:00后就没人在办理业务了,而是在17:00之前有受理这个业务,就需要把这个完成下去,所以对于有些数据来说是结束时间可以达到17:00以后的。第二个,错误原因在于思路上出现错误,我原本预想只用把当前所有队列中最短的那个弹出来就行了,

2015-10-29 10:55:17 489

原创 POJ 2513 字典树

POJ 2513 字典树题意:题目给你了一些木棒,这些木棒前后有颜色,现在问你可不可能将这些接起来按照木棒的颜色来连接。题目的木棒数量是25w。思路:我们将这些木棒的端点看成图里面的端点,木棒本身作为图的边,那么这时候这道题就转化成求这些木棒(边)组成的图里面是否有存在欧拉图。欧拉图:通过图中的所有边并且只通过一次的通路为欧拉图,图为有向图或无向图。那么无向图是欧拉图的充要条件是:图是连通的图中

2015-10-26 22:04:15 413

原创 PAT Advanced 1086

题意:给你一颗树,然后按照先序序列压进栈,按照中序序列弹出栈。于是乎,题目的意思转变成给你先序序列和中序序列,你要写出后序序列。思路:先序:根 左子树 右子树中序:左子树 根 右子树先从先序中找到一个根,然后在中序里面找到他的左,右子树的范围,关于找范围可以先找到左右子树的长度,这样比较方便确定区间。总结:=-= 浙大真会出题,卡了我半天,贡献几组数据5P

2015-10-23 21:54:36 497

原创 Codeforces Round#323 div.2 C

题意;题目首先假设了给了你一组数字,那么这组数字根据这个规则,得到这样的一张表现在题目给你了一N*N的数字,这些数字是不规则排列的,现在要求你找到原数组。思路:首先找到一个最大的数,然后提取出来,此时这个数一定能够保证是属于数组里面的数,然后这时候提取出来第二大,然后与前面的数进行gcd运算,这时候算出来的值一定不属于集合,然后找到第3大的数,同样与前面的数进行gcd运算,。。

2015-10-17 10:55:55 329

原创 Codeforces Round#324 div.2 E

题意:给你两串数字序列,要求你按照把上面的一串变成下面的一串。转换需要的花费是sigma|i-j|,然后还需要要求你把转化的序列的次数打印出来,并且也要把每次转换对应的点打印出来。思路:先记录第一个序列每个元素在第二个应该有的位置需要的花费,即计算每一个|i-j|,对于这个序列需要的花费,即是sigma|i-j|,现在我们做一个操作,对于那些要往后移动的,我们将它的移动花费变成正数,需

2015-10-17 09:29:30 288

原创 Codeforces Round# 324(Div.2)

A. Olesya and Rodion题意:给你N位数,然后给一个数字t,问你是否能不能找到这样的一个N位数,使得能被t整除。思路:因为数据量在2到10之间,所以分等于10,和不等于10来看。当t=10时,这时候只需要最后一位是0那么就能整除10,不过这要N>1,因为等于1是不可能的。当tcode:#include#includeusing namespace std

2015-10-11 14:22:23 319

原创 POJ 2481 线段树

题意:给你一个区间,问你有多少个比这个区间大的区间,区间大小比较按照这个规则 If Si Ej - Sj, we say that cowi is stronger than cowj.思路:咋一看这个根本没法想象到和线段树结合到一起,(所以说线段树之类的题最重要的是思路=-=,而不是算法)我们先暂时想一个思路,如果把这些区间当做点来看的,那么对于这道题要求的值其实就是这个点

2015-10-06 14:57:30 482

原创 Codeforces Beta Round #19D 线段树

题意:在一个二维平面内,现在有三个操作add x y 向这个平面内添加一个点并且保证这个点之前没有被加入remove x y 从这平面内删除这个点并且保证这个点时存在过的find x y 找到这个点的右上角离它最近的那个点思路:二维转一维,以x轴作为线段树的区间,线段树每个区间保存这个区间最大的y,根节点用set保存有多少个y,因为只有20W个数然而数据大小达到10^9,所

2015-10-06 12:29:45 369

原创 Codeforces Yandex.Algorithm 2011 Round 1 85D 线段树

此题和POJ2828andPOJ2886其实属于同一类型的题目,也是作为某年的成都赛区的比赛题目。也感谢Acrush的代码让我知道怎么做这题。首先讲题意:现在有一个序列,要求你求这个序列下标对5取模余3的所有数字的和(下标从1开始)。有三个操作add 向这个集合中添加一个数字,并且保证这个数字是没有重复出现过的;del从这个集合中删除掉一个数字,并且保证这个数字是在这个集合中存在的

2015-10-04 16:20:08 617

原创 POJ 2886 线段树

该题和poj2828的思路非常类似。题意:有N个人参加一个游戏,每个人手上都拿了一张卡片,每张卡片的数字都是非0的,现在从第K人开始,第K人离开后,这时候根据第K人手上拿着的卡片的数字,决定下一个人是谁,如果这个数字m为正数,那么其实相当于向右数m个,如果这个数字为负数,那么其实相当于向左数m个数的位置(所有的数法都是要排除自己)。现在构建一颗类似于poj2828的线段树,这时候主要的

2015-09-23 20:02:28 2257

原创 POJ 2828 线段树

线段树单点更新这道题写线段树是很简单的操作,但是最重要的是思路,因为很难想到。因为是插队插入的,所以换个方向思考,最后插入的一定是该位置,然后忽略该位置,后面同理。主要思路:现在看样例这组数据,因为上面已经说过了,所以我们先要把所有的输入存储起来,于是从最后一条输入来看,3 69(位置先自加1)说明了前面是有2个空位的,于是这时候就要插入到第3个位置中(原因在于此时序列中没有其他数字,

2015-09-21 21:02:02 917

原创 HDU 2796 线段树

线段树单点更新题意:一个广告板,知道它的长和宽,现在有N条信息需要在板上显示,每天信息都有自己的宽度,长度都为1。现在问你每条信息在哪个位置。思路:利用线段树,将有多少条信息或者高度作为线段树的最大区间,然后题目中说明要如果不能放在最上边(topmost),那么就放在最左边的上边(leftmost)。现在以样例为准来说明,依据样例数据,那么线段树的区间为1~3,那么首先宽度为2

2015-09-20 15:55:33 552

原创 HDU 1394 线段树

线段树单点更新。题意:给你任意N个数字,然后算这个数字序列的逆序数,然后依次把第1个,第2个。。。第N个移动到后面得到一个数字序列,在这些序列里面找到逆序数最小的一个序列,打印出该序列的 逆序数。思路:利用线段树单点更新的思想,输入一个数就 判断在线段树里面是否有比他大的数,如果有,则计入ans。计算完原始序列后,下面要用上一个结论,就是接下来的序列的逆序数=上一个序列的逆序数-t

2015-09-17 21:30:49 330

原创 HDU 1754 线段树

线段树单点更新这道题需要注意的是输入,题目明确提示了要用scanf来输入加快速度,所以这里可能会有一个错误,在build里面是用scanf输入的。而输入文件可能是在输入N个数据后有一个换行符,如果不把换行符读出来可能会有错误。所以要用下面这句话scanf("%*c%c%d %d", &c, &a, &b);#include#include#includeusing namespace

2015-09-16 20:25:28 300

原创 HDU 1166 线段树

题意:给你N个数据,现在有无数个查询(每次不超过4W)。线段树的单点更新。#include#include#includeusing namespace std;#define Lchild rt<<1,L,m#define Rchild rt<<1|1,m+1,Rint T,N;int tree[50010*3];void push_up(int rt){ tree[

2015-09-15 22:17:53 314

原创 PAT Advanced 1041

题意:给你一些数,让你判断有哪些数是只有一个的,然后打印出最先unique的那个数。注意10^4是有10000,还有数字大小是1到10000,N的大小是1到100000.#include#include#includeusing namespace std;int t;int number[111111];int rep[11111];int unique=-1;void

2015-09-05 20:15:55 312

原创 PAT Advanced 1035

题意:给你一些字符串,对于一些特殊的字符要进行转换。需要注意的地方:If no account is modified, print in one line "There are N accounts and no account is modified" where N is the total number of accounts. However, if N is one,

2015-09-05 19:33:43 335

原创 PAT Advanced 1031

1A题意:给你一个字符串,让你按照它给的要求打出U形字符串样子。整个题目中最重要的一句话。it must be satisfied that n1 = n3 = max { k| k 2 for all 3 2 <= N } with n1 + n2 + n3 - 2 = N.这句话的意思有两个:1.n1和n3相等。2.n1和n3的最大值也不能大于n

2015-09-05 18:44:06 315

原创 PAT Advanced 1027

题意:给你3个RGB值,让你在13进制下进行转换。可能会坑的地方:假如没有两位,只有一位,那么左边要补零。#include#include#includeusing namespace std;string a;int R, G, B;char ans[199]="";int t = 0;void deep(int radix, int num){ if (num

2015-09-05 17:57:03 381

原创 PAT Advanced 1023

水题,也只是简单的模拟需要注意的一点是:546对于这种double后会进位的数要留意,如果你输出的是092,那么就是少了进位的1。我也因为这个错了一次。#include#include#includeusing namespace std;int number[22];int times[10];int length;void solve(){ int up=0;

2015-09-05 12:32:12 318

原创 PAT Advanced 1019

水题,直接模拟但提交的时候还是错了几次,原因在于我递归产生的序列是恰好反着的,我没看清,于是错了几次。递归出来的数位是反着的,这点需要记住。代码如下#include#include#include#include#includeusing namespace std;//ifstream fin("fin.txt");//streambuf *old = cin.rdb

2015-09-05 12:05:06 350

原创 PAT Advanced 1015

题意:要求你把给的这个数按照他给的进制反转下,然后判断是否是素数。是就输出yes,否no坑点:1.1不是素数2.题目说的是10^5,千万别写成10000.。。。。。嘛,这个算眼睛不敏感,要多练。#include#include#include#includeusing namespace std;string s;int number;int r;bool i

2015-09-02 23:50:55 271

原创 PAT Advanced 1013

Battle Over Cities简单的并查集应用:思路 先假设这个点不在图里面,然后构建并查集,算有几个连通分量,算完之后,连通分量数-1就能得到需要修建多少条路。源码#include<iostream>#include<fstream>#include<cstring>using namespace std;int tree[1010];//ifstream fin("fin.

2015-09-02 19:21:54 542

原创 PAT Advanced 1012

这道题我是一次过的,but。。。。。_(:зゝ∠)_我用了180行,算是我写代码用的最图省事的一个代码,我原本以为只有我那么写,网上收了下博客,发现竟然有同道中人,当时眼泪就掉下来了。现在这段代码风格特别不好,先在这里保存着,待我有空就来优化一下这段代码。关于题目:没什么好说的,就是水水的模拟而已啦~#include#include#include#includeusing

2015-09-02 16:28:28 202

原创 PAT Advanced 1011

相当简单的模拟题。思路就是每一行找一个最大的就行了,而且题目已经说明是3行3列的矩阵#include#includeusing namespace std;struct node{ double W, T, L;};double matrix[4][4];//ifstream fin("fin.txt");//streambuf *old = cin.rdbuf(fin.

2015-09-02 13:27:26 227

原创 PAT Advanced 1010

此题题意:给你两个数,确定一个数的进制,然后判断另外一个数能否在合理的进制下表示。如果采用简单的顺序查找,那么可呢会在测试点7运行超时。如果想要过掉这道题,那么要用上二分查找。二分查找的难点在于选择哪一个区间作为查找的范围。首先来确定下界,下界一定是另外一个数的数位上最大的那一个数。为什么呢?因为在进制表示中,一个数每一位中最大的那个数一定是该进制所代表的数小的,例如2f这个数

2015-09-02 02:06:29 296

原创 PAT Advanced 1009

该题题意很简单,是让你求两个多项式相乘得到的结果。这里需要注意的是几种情况:1. 当有指数不为0,系数为0的情况。2.当有为负数的情况,判断有多少个时要用绝对值来,就是这个地方卡了我有一会儿,因为是采用map来做的,所以可能会出现这个问题;#include#include#include#include#include#includeusing namespace st

2015-09-01 15:53:52 319

原创 hdu1166线段树

线段树入门题,线段树除开它的叶子节点其余为区间。建立线段树的操作可以在wiki上搜索。这道题有三个操作,query和sub和addsub和add的使用的函数一样,用update来更新,不同的是要用sub传值的时候把delta加个负号。线段树的建树;bulid函数采用递归的形式来进行建树,只有当为叶子节点才会输入进数字。但某一分支的叶子节点输入完毕,用了push_up函数

2015-08-11 17:08:09 298

原创 hdu1198并查集

之前忘了并查集使用的方式,导致我把图中的11张图看成了各自的一类,然后就悲剧了=-=简述这道题的意思,就是有11种suqare然后将这些可以组成各种大小的田地。现在它给你一块由这些suqare组成的田地,因为每块地都有pipe,要保证这些田都被灌溉你要判断这块地需要多少个wellspring。首先说下并查集的思路:题目要求是输入m行,n列,而且m和n是不超过50,算出来是2500,说明

2015-08-09 15:52:12 514

原创 hdu1272并查集的实现

这道题可以用并查集来实现,题目意思非常明确,给你一张图让你判断是否有环。这题比较坑的一个地方在如果一开始就是输入0 0,那么要输出Yes。#include#includeusing namespace std;int p[100100];bool isappear[100100];bool isout=false;int t = 1;void init(){ for (

2015-08-09 15:49:10 304

原创 Codeforces Round #312 div 2 C的二叉树实现

感谢波兰的红名大牛Errichto的讲解。        这道题中涉及到了两个操作,一个是加倍,另外一个除2并向下取整。这如果放在一个二叉树上的操作无非就是向上到达其父节点,向下(只能走左孩子)到达其子节点。我直接贴大牛的原话吧Let's say input is n = 3 and array 2,5,6. Let's think about a binary tree with 7 (

2015-07-19 16:45:10 469

空空如也

空空如也

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

TA关注的人

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