自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

cgjiayou

无尽光芒

  • 博客(179)
  • 问答 (1)
  • 收藏
  • 关注

原创 自己做的一些西南交大(swjtu)小工具, 应该还挺实用的

交大瑞士刀: https://easyswjtu.com包括 免研排名 专业主干课 课程给分情况查询. 还有+1s: https://github.com/zhewang95/pos chrome浏览器插件, 自动识别教务网登录验证码.

2017-03-17 10:13:10 10335 4

原创 两种强连通分量算法——tarjan和kosaraju

这两个算法其实都非常简单,其中tarjan算法只需进行一次dfs,更为高效。但我更喜欢kosaraju算法,因为这个算法的思考过程更加巧妙。tarjan算法的思想非常简单直观,随便找篇教程就很容易理解,下面我主要讲讲kosaraju算法。kosaraju算法进行两次dfs,第一次在原图上进行,并在结点递归调用返回时将结点压入一个栈中,第二次dfs在原图的逆图上进行,并且初始点选择栈中最上面

2014-11-29 10:28:04 5797

原创 读背包九讲之二——完全背包

没想到完全背包还有如此神奇的写法。学习了。还了解了和快速求幂类似的二进制思想。对于为什么完全背包能够这样直接从s[i][1]到v遍历可行并且必须这样,可以从两个层面理解。一是从抽象的概念角度,也就是文章里所说的,对于状态dp[j],由于可能多次取到同一个物品,所以从已经遍历的方向向未遍历的方向遍历是正确的,并且只有以这个方向遍历才是正确的。而是从具体的代码执行流程考虑,假设dp[j]第一次

2014-11-25 21:29:39 354

原创 01背包的优化——读背包九讲

做的poj3624.代码如下#include#include#includeusing namespace std;const int MAXN=3500,MAXV=13000;int dp[MAXV],bound[MAXN],s[MAXN][2];int main(){ int n,v,all; while(~scanf("%d %d",&n,&v)){

2014-11-24 21:32:19 472

原创 我所理解的kmp算法

从现在起,这个博客不再是单纯的为了记录刷题的数量,开始侧重于文章的质量,希望能尽量多的反映我自己思维的结果。以kmp算法为起点,继续学习其他模式匹配算法。其实我倒觉得,kmp算法的难度被很多人夸大了,包括我的数据结构老师。个人觉得严蔚敏的c语言版数据结构讲的kmp还是很不错的,就是数组下标从1开始让我在理解的时候老是搞混。首先看看最原始的模式匹配算法对于以下主串及模式串是怎样运行的:...

2014-11-24 19:08:40 501

原创 ccf 201409-4 最优配餐(bfs)

cccf 201409-4 最优配餐(bfs)没想到bfs还能这样,我对bfs的理解没有我想想的那么深刻啊实际上很简单但自己第一次见到这种求所有源点和所有目标点之间的最短距离的bfs,以前碰到的,都是单源点求bfs,恩,没想到做这样的题还长见识了。。#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#

2016-04-08 17:03:47 3017

原创 ccf csp 201312-4 有趣的数

ccf csp 201312-4 有趣的数首先我要再次大喊一声,组合数学大法好!题目乍一看还有点难,想用递推还是觉得有点复杂,但是用组合数学解决就会发现非常简单。 可以这样思考:先只考虑0和1怎么放,当有a个0和b个1的时候,所有0在所有1的前面,又由于最高位不能是0,那么最高位只能是2。这样,就有a+b-1种情况(从1取到a+b-1)。假设有c个2和d 个3。一个2已经确定放在最高位了,那么

2016-04-04 21:43:04 2509 6

原创 2015 UESTC Training for Data Structures 秋实大哥下棋

第一次看这题的时候确实不知道怎么下手,看了别人的题解后才恍然大悟。地址在这里http://www.cnblogs.com/Xiper/p/4470218.html就是先将车和矩形(右边)放在一起对x坐标排序,然后从小到大处理。维护一棵线段树,对于车,更新线段树的最小值。对于矩形,查询矩形的竖边区间的线段树的最小值,只要最小值大于该矩形的左边的x坐标,就说明该矩形被保护。然后对y坐标也类似处理。

2016-03-11 20:45:49 478

原创 蓝桥杯基础训练 ALGO-122 未名湖边的烦恼

题目上标的是递推,确实要用递推做,当然,如果数据规模够小的话可以直接用公式,组合数学大法好啊#include#include#define MAX 20using namespace std;long long dp[MAX][MAX];long long fun(long long a){ if(a==0) return 1LL; return fun(a-1)*a;

2016-03-04 20:34:40 996

原创 蓝桥 算法训练 ALGO-116 最大的算式

蓝桥题目的风格和acm差异很大啊,感觉acm需要的是纯粹的算法,蓝桥算法考的没有这么难但是对编程能力的要求也不低。所以做的时候感觉怪怪的这道题注意要用long long,然后5层循环要是放在acm里面应该是比较少见的吧#include#include#include#include#define MAX 20using namespace std;long long

2016-03-04 18:57:41 1224

原创 poj 1789 Truck History 最小生成树

好久没写kruskal算法了,复习一下。由于两个节点间距离的取值只可能是1-7(每个点的名字不同),所以 不用排序,直接放到对应的数组里面就行了。然后直接交上去TLE,加了个优化当已经达到n-1条边时直接goto end#include#include#include#include#define MAXN 2000#define MAXM 8using namespace

2016-01-13 18:46:42 384

原创 poj1837 balance 背包

注意这里每个砝码都要用上,所以状态转移时只转移上一个砝码用上的情况。由于这里要求的是种数,直接相加就可以了,所以加的值如果是0就代表上一个(或多个)砝码没有用上的情况对本状态没有贡献#include#include#include#include#define MAXN 25#define MAXM 16000#define MID 7550using namespace std

2016-01-13 16:40:59 358

原创 swjtu行政自动挂机工具

#encoding=utf-8__author__ = 'cgjiayou'import urllib,urllib2,cookielibfrom xml.etree import ElementTree as ETimport time,randomimport multiprocessingresources=['5CB9CDF08E6F614A','78CFB72F1D506D

2015-11-27 13:13:11 1191

原创 UVA 11552 Fewest Flops

水题#include#include#include#include#define MAX 1100using namespace std;char s[MAX];int L,k,dp[MAX][26],count_t[26];void init(){ cin>>k; cin>>s; L=strlen(s); memset(dp,0x7f,sizeof(dp));

2015-11-24 11:56:04 384

原创 UVA 1424 Salesmen

简单dp#include#include#include#include#define MAX 210using namespace std;int n,m,l,path[MAX],graph[MAX][MAX],dp[MAX][MAX];void init(){ cin>>n>>m; memset(graph,0,sizeof(graph)); int a,b; f

2015-11-23 22:16:55 321

原创 UVA 11584 Partitioning by Palindromes

受区间dp思路影响太严重。。。开始没用记忆化,tle了#include#include#include#include#define MAX 1010using namespace std;char s[MAX];int dp[MAX][MAX],L,dp1[MAX][MAX];void init(){ gets(s); L=strlen(s); memset(d

2015-11-23 19:54:47 328

原创 windows安装kivy最少走弯路的方法

想试试kivy到底好不好用,就上官网看了下文档开始安装,结果照着豆瓣上的一篇文章去安装怎么都报错,不是报gcc的错就是cython的错或者莫名其妙的错误,折腾了半天之后,我突然意识到,kivy提供的那个安装包里面需要的东西都有啊,为什么不直接用那个安装包里的文件试试呢?一试果然成功了。就是pycharm创建工程的时候注意要把解释器选择为kivy安装文件夹下的那个。恩,我的第一个kivy程序终于

2015-11-08 17:40:44 4836 2

原创 BestCoder Round #61 (div.2)

比赛的时候过了两道,第三道超时20分钟过得A题简单,我用了17分钟才写出来,看了界面熊大大的status,四分钟,直接把我吓傻,看了他的代码才知道,与大大之间的差距有多大:#include #include #include #include #define LL long long#define pir pir #define m_p make_pair#defin

2015-10-31 22:49:31 372

原创 UVA - 10558 A Brief Gerrymander

恩,核心是01背包,结果,我托了三个月才ac....... 结果发现,是容斥定理用错了。。。这几天,我应该好好扇自己的脸。。。#include#include#include#include#define MAX 105using namespace std;int n,s,a,grid[MAX][MAX],sumgrid[MAX][MAX],sep[MAX];int dp[M

2015-10-24 19:34:38 362

原创 soj1566补兵

补兵Time Limit:1000MS  Memory Limit:65536KTotal Submit:206 Accepted:29Description在非常流行的DOTA游戏中,补兵是非常重要的一种技术统计。如果一个单位被对方的多个单位攻击至死,则对该单位造成最后一次(致命的)伤害的攻击者将会获得更多的奖励(金钱和经验),这名攻击者被记录一次补兵。现在有N个人(编号

2015-10-23 19:23:54 462

原创 soj2271异或求和

题目意思是对于区间[a,b],和[c,d]内的任意一对数,求他们的异或之和、开始不知道算法怎么写,看了题解,要先求出每个区间每个位置上一的个数,再用第一个区间某一位上1的个数乘以第二个区间上那位上0的个数即为答案中该位的个数,算法其实不难,可好久没怎么写c++代码的我发现自己代码能力在不知不觉中下降了很多,一个是对数组指针不能运用memset,另一个是最后取模运算时少写了一个取模导致wa.。。

2015-10-20 22:26:41 823

原创 python装饰器和偏函数联合运用碰到的问题

在写一个爬虫系统,用来爬取学校各个新闻网站的新闻并推送到微信上。开始,我每个网站写一个爬虫函数,后来发现爬取的过程有许多相同的地方,代码冗余度太大,就想到了用装饰器:def newsResultProcess(fun): # 每个新闻爬虫按要求返回5个参数即可,爬取元素的顺序必须是:id、标题、时间 @functools.wraps(fun) def wrapper(*arg

2015-10-07 23:46:17 487

原创 UVA - 10280 Old Wine Into New Bottles

首先觉得总容量很大,瓶子种类很多,直接完全背包肯定不行。但是既然数据大的离谱,肯定有别的方法可以降低复杂度。我的大致思路对了,就是找到完全背包的上界,但是在具体实现上碰到了一些问题,包括最后对复杂度还是没有自信。两个方面,一个是完全背包上界:maxx=min(maxx,s[i][0]*s[i][0]/(s[i][1]-s[i][0]));另一方面是粗算瓶子种类有180*100=18000种

2015-07-31 17:00:43 524

原创 UVA - 709 Formatting Text

我是这样状态转移的,一维dp[i]表示前i个字符的badness的最小值,且i为最后一行的最后一个字符,这样可以保证dp最后一定是最小值,但题目要求输出开始的badness最小的情况,光有状态转移是不能保证这个条件的,开始我想的是,使i所在的那行单词尽量少,这样前面的单词尽量多就可以在总体上保证前面的badness最小,但交上去wa,后来想了一下,这样只是总体最小,不一定前面的某个局部最小,于是状

2015-07-31 10:55:56 384

原创 UVA - 10163 Storage Keepers

开始并没有注意到需要使两个量最优与只要求一个量最优有什么不同,就定义dp[i][j]为前i个人看守j个storage的最大安全线,然后顺便把wage求出来。交上去却一直wa。疑惑不解的去看别人的代码,郁闷的发现所有人都用了两次dp,我开始非常不解,既然薪水是由人决定的为什么还要再用一次dp?后来仔细想想才发现这样做的道理,从较高的抽象层面看,定义的状态dp[i][j]本身就是求一个量的最优值的,而

2015-07-23 19:04:08 269

原创 UVA - 10817 Headmaster's Headache

花了四个多小时做这道题,碰到这样不算难但自己解决不好的题才意识到自己各个方面的不足。开始,我自己能够想到要用状态压缩的背包来解决。课有些问题一直没搞清楚,因为每个老师能教的课程不一定非得他交,我就认为状态转移时还要考虑各门课教还是不交,然后初始化也是一样。这样就比较麻烦,最后我还是写出来了,但复杂度太高,TLE,然后才发现不一定非要考虑教还是不交,因为遍历的时候每种状态都会考虑,这样,只要初始

2015-07-23 15:40:01 386

原创 UVA 10599 Robots(II)

开始没想出什么思路,看了题解恍然大悟,是LIS,不过一看数据量O(n*n)的复杂度要到十的八次方,就一直在思考nlgn,也就是加上二分的方法应该怎么做。可是思来想去觉得难以实现,后来才发现数据比较水,直接N的平方几十毫秒就过了#include#include#include#include#define MAX 105using namespace std;int l[M

2015-07-20 22:12:49 499

原创 BestCoder Round #45

又把自己给坑了,,,,这样做下去太没意思了,要么好好干下去,要么趁早走人A题水B题,开始想了半天硬是没想出来,然后开始hack之后才写完算法,提交WA。想了半天感觉哪里都是对的,,,,,其实是自己太垃圾,简单的地方都能写错。#include#include#include#include#define MAX 1100using namespace std;int a[M

2015-06-20 22:23:34 417

原创 UVA - 10723 Cyborg Genes

这道题应该说我没有完完全全的搞懂,仍然有点晕晕呼呼的感觉。对于s1[i]==s2[j]的情况,直接dp[i][j][t]=dp[i-1][j-1][t-1]就行了,因为s1[i]前面的字母必须在s1[i]之前,s2同理(感觉像是废话).所以只要在s1[i]前面和s2[j]前面的后面直接加上相同的字母就行了。对于s1[i]!=s2[j]的情况,就有两种情况,一种是s1[i]在前,一种是s2[

2015-06-12 16:37:15 307

原创 UVA - 11008 Antimatter Ray Clearcutting

状压dp,值得注意的地方还是很多的。开始时始终思路不畅,不太清楚究竟该怎么定义状态,所以搁置了很久。后来才明白,由于最后剩下的树的状态有很多种,而开始所有树还在的状态只有一种,所以可以把状态定义为,当前还剩这么些树的时候,要使剩下的树小于n-m棵至少需要的射线数,这样,开始所有树都在的情况就是最大的父状态。这里要注意总结,一般最特殊的状态总是作为最大的父状态。然后是状态压缩上一些编程技巧和

2015-06-10 21:05:37 459

原创 django学习笔记

1、admin中的search_fields,如果添加的是外键或多对多关系,就必须用双下划线指明是外键中的哪个属性2、经过实验,外键不可以被设置成blank而多对多关系可以

2015-06-09 10:02:40 368

原创 BestCoder Round #43

水了两道题,而且有一道还被hack了。。。A题不说B题刚看到题目我愣了半天,后来才想明白如果先对所有数取模,那么任意两个数的和一定在0到2q之间,准确的说,是在0到2Q-2之间,而且它们对Q的模存在两个极大值点,于是我的第一版写的是从小到大遍历,先与最后一个相加获得第二个极大值点,再二分小于Q的最大值,交上去第一次RE,当时没有仔细检查,直接数组开大十倍又交了遍Ac。然后就被HACK,

2015-06-07 21:46:13 330

原创 BestCoder Round #42

第一次打bc,也是我第一次打这种比赛,做出来三道不过system test时挂掉一道。原来比赛是这么的好玩。。。总的来说,还是有很多收获的首先我感觉,我的手速还是有了那么一点提升的A题水题代码略B题变形二分#include#include#include#include#define MAX 100010using namespace std;int n,m,shoo

2015-05-23 21:48:12 304

原创 UVA - 10913 Walking on a Grid

简单dp。由于只能横着走和向下走以及每个格子只能走一次。可以枚举i,j 这个位置时,下一行应该在哪个位置核心部分冗余度很高,但想不出0冗余又不会增加复杂度的办法。。。干脆就直接把代码复制一边然后改个循环#include#include#include#include#define MAXN 76#define MAXK 6using namespace std;int n,k

2015-05-20 19:32:51 415

原创 UVA - 10604 Chemical Reaction

本身记忆化搜索没什么难的,但被自己坑了几次。首先是dfs里面少了恢复minus[i]的语句,当时根本没意识到这里的错误,结果debug了半天才找到。然后是注意处理只有一个管子的情况,这时的热量应该是0.最坑的就是i与j反应和j与i反应结果可能会不同,看了stainger的题解才知道#include#include#include#include#define MAXN 7

2015-05-20 12:04:44 979

原创 UVA - 607 Scheduling Lectures

简单的dp#include#include#include#include#define MAX 1010using namespace std;int s[MAX],dp[MAX][MAX];int n,l,c,cases=1;void init(){ memset(dp,0x7f,sizeof(dp)); dp[0][0]=0;}int main(){ wh

2015-05-19 15:48:20 353

原创 UVA - 10118 Free Candies

做完觉得其实很简单,但当初最开始思考的时候却思路十分不畅,卡了很久,还是对问题的特点分析不够迅速有效。开始我一看,就觉得是记忆化搜索,但是想了想,如果从0,0,0,0这个状态开始的话,那下一个状态难道是这个状态的子状态?可这样就矛盾了,因为先取的才应该是子状态锕。在这里我卡了很久,虽然当时我已经想清楚对于一个a,b,c,d,的状态,得到的糖的数目是一定的,但我没有充分利用这个条件。那如果从n,

2015-05-18 16:18:09 382

原创 UVA - 11258 String Partition

开始没仔细考虑,看成了区间dp,这样复杂度会到十的七次方,果断超时,后来才发现,可以直接线性dp,从前向后do即可#include#include#include#include#define MAX 210#define BOD 2147483647using namespace std;char s[MAX];long long len,dp[MAX];void in

2015-04-28 16:57:09 345

原创 UVA - 10911 Forming Quiz Teams

简单记忆化搜索,用二进制位表示组队情况#include#include#include#include#include#define MAX 8#define INF 10000000using namespace std;int n,vis[1<<(2*MAX)],cases=1;char name[MAX*2][25];double x[MAX*2],y[MAX*2]

2015-04-28 12:34:29 292

原创 uestc data structure D - 秋实大哥与战争

本来我是基本不会stl的,但这题还是让我体会到了stl的有用,看来要把stl加入我的学习计划了#include#include#include#include#include#define MAX 100010using namespace std;int main(){ int n,m,t,x; cin>>n>>m; sets; s.insert(0); s.ins

2015-04-21 16:34:28 438

空空如也

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

TA关注的人

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