自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Fighting

做一只勤劳的小蜜蜂,幸福才能揽入怀中。

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

原创 UVa:10000 Longest Paths (DAG上的最长路)

DAG上的最长路。 如果使用floyd可以将所有边值取反,这样就转化成了最短路问题了。用时0.176s。#include #include #include #include #include #define MAXN 105using namespace std;int main(){ int n,s,kase=0; while

2013-11-29 18:50:05 734

原创 HDU:Good Numbers

每10个数中必有一个各位数字和可以被10整除的数。算的时候特判一下边界。另外注意0也是符合的。还有就是要用%I64d。 #include #include #include #include #include #define ll long longusing namespace std;ll Sum(ll val){ ll sum=0;

2013-11-29 12:21:12 576

原创 UVa:10519 - !! Really Strange !!

数据量这么大一看就是有公式,而且肯定要用大数ans=n*(n-1)+2用到了大数乘法,减法,加法。要特别注意乘法开的数组要求是最大的乘数的两倍以上。#include #include #include #include #include #define MAXN 205using namespace std;void BigAdd(char *a,char *b,ch

2013-11-29 11:09:27 563

原创 UVa:10994 Simple Addition

第250道题。一开始看错题了,其实就是要你求最后一个非零数字的和。找一下数学规律即可。  #include #include #include #include #include #define ll long longusing namespace std;ll solve(int val){ ll sum=0; while(val)

2013-11-29 07:08:41 723

原创 UVa:10940 Throwing cards away II

直接模拟会超时。我优化了N次还是超时。最后想到打表,结果50W的数据大约有15M,打开就崩了。。后来一看打的表就发现其中的数学规律了。其中规律,看代码吧。 #include #include #include #include #include #include using namespace std;int p[25];int Search(int v){

2013-11-28 14:12:08 553

原创 UVa:10359 Tiling

可以推出f[i]=f[i-1]+2*f[i-2]需要用到大数加法。#include #include #include #include #include #define MAXN 105using namespace std;void BigAdd(char a[],char b[],char back[]){ int p=0,up=0; char c[M

2013-11-26 07:06:49 565

原创 UVa:10183 How Many Fibs?

就是一道纯大数题,需要用到大数加法和大数比较。一开始不知道哪里错了,后来改了改就A了。 #include #include #include #include #include #include #define MAXN 1005#define ll long longusing namespace std;int Judge(char* a,char* b) //a

2013-11-25 11:18:58 588

原创 UVa:10334 Ray Through Glasses

其实很好推。自上向下反射,上层可以反射到中层,下层两种情况,中层可以反射到下层一种情况。自下向上反射,下层可以反射到中层,上层两种情况,中层可以反射到上层一种情况。这样一推会发现公式满足f[i]=f[i-1]+f[i-2]其实就是斐波那契数列。  #include #include #include #include #include #include #d

2013-11-25 07:05:52 669

原创 Sdust ACM Weekly #5

感觉这次周赛的题目相当不错。HDU 4371写不出合法的数字包括两种情况,1是能够写出的数字Si大于Si-2但是超过了n,2是Si没超过n但是小于等于Si-2了。这就说明胜利者的最后一步一定是使用了最小的那个数字(否则只要他使用非最小数字且合法,对手都可以使用最小数字来写出合法数字),在此之后再使用任何数字都会超出n。所以对手必败。那么最先达到这个状态的就是胜利者。那么达到这个状态

2013-11-23 18:58:02 758

原创 POJ:1469 COURSES(匈牙利算法模版题)

纯模版题,一点小错WA了两次。 #include #include #include #include #include #define MAXN 305using namespace std;int N,P,link[MAXN];bool vis[MAXN],gl[MAXN][MAXN];bool Match(int v){ for(int i=1; i<=N

2013-11-21 10:43:02 783

原创 Codeforces Round #213 (Div. 2)

这是我第三次做CF。做了两道水题,感觉还是思考不够。 365A - Good Number常见的思路是提取每个数字的每一位,然后标记出现过的数字,最后判断小于等于k的数字是否全出现即可。这个过程一般使用bool数组实现。我看见某人将小于等于k的数字加入到set中,最后判断set的size是否为k+1,这也不失为另一种实现办法。 B. The Fibonacci Segment

2013-11-20 14:07:47 841

原创 UVa:208 Firetruck

回溯。时间复杂度是阶乘级的,需要剪枝。加了两个剪枝,这两个剪枝都依赖于Floyd算法。先通过Floyd算法求出dis[i][j]表示i到j之间简单路径的条数。然后在回溯选择边的时候,需要看该点到n点是否有路径,没有则说明该点不能到n,所以可以剪掉。另外当输出个数达到dis[1][n]的时候就可以直接结束了,不需要继续递归了。 #include #include #inc

2013-11-19 07:17:21 750

原创 HDU:1045 Fire Net

以前在UVa做得这道题是搜的题解。几个月以后重做这道题发现异常简单。直接搜索每个空的位置能否放置大炮即可。 #include #include #include #include #include #define MAXN 20using namespace std;int x[MAXN],y[MAXN],n,ans;bool place[MAXN][M

2013-11-16 12:41:43 523

原创 HDU:4770 Lights Against Dudely

这个题最多只有15个位置,每个位置放或者不放,可以通过回溯来解决。果然我回溯很弱,虽然一开始就想到了这个算法却傻乎乎的写了个阶乘的算法,果断超时。后来重写了以后交上去WA了。可能是代码写得比较搓,就参考cdc的代码格式又写了一个,他的思路和我的是一样的,然后就A了。对比之后发现他的代码在回溯之后恢复状态是恢复了四周全部的,而我原来只恢复了可以照到的位置,按理来说这里应该不会有问题的。

2013-11-15 15:17:45 589

原创 UVa:11384 Help is needed for Dexter

#include #include #include #include using namespace std;int main(){ int n; while(scanf("%d",&n)!=EOF) { int ans=0; int low=1,high=n; while(low<=high)

2013-11-14 10:20:02 557

原创 POJ:1922 Ride to School

想通了就会发现这是一道大水题。不管中间过程如何,Charley一定是最早到达的,而且是并列,所以只需要求里面出发时间非负最早到达的时间即可。看了disscuss才知道。。。唉。这个题还是说明思路要灵活,从另外的角度看问题。。 #include#include#include#include#includeusing namespace std;int main()

2013-11-14 07:54:19 859

原创 UVa:10651 Pebble Solitaire

虽然是动规但我却是用搜索过的。数据量比较小,每个位置就两个移动方向,因此是2^12,相当小。用二进制表示状态(第一次独立写着玩意,居然1Y了,好不容易),1表示'o',0表示'-'。val&x[i]用来判断该位是0或者1,val^x[i]用改变第i位的值用dfs写的,另外开一个数组判重,如果当前状态之前出现过那就没有必要再搜下去了。最后查找出现的所有状态,选里面1个数最少的那个就是

2013-11-12 13:37:38 674

原创 HDU:4771 Stealing Harry Potter's Precious

杭州现场赛的题目,虽然大神们都说水,但我感觉还是不错的,还适合我这个水平做。用bfs求出各个宝物之间的最短距离以及和Dudely之间的距离,然后用dfs枚举Dudely访问各个宝物的顺序,最后比较出距离和的最小值即可。 #include#include#include#include#include#define INF 2139062143#define MAXN 105

2013-11-11 12:35:33 743

原创 POJ:2481 Cows

这题个人感觉不错,乍一看是个区间覆盖问题,其实是用树状数组求逆序数。但是有些地方要注意。所谓stronger是指一个区间可以完全覆盖另一个区间,如果这俩区间完全相同是不算的。按x左边升序排序,如果x相同y要降序排序。在用树状数组的时候要注意了,假设区间为p[],我们这里是求p.y的逆序数,其实也要考虑p.x。假设当前区间的下标为i(i从1开始),那么p[i]前一个元素的下标为i-1

2013-11-11 11:13:06 694

原创 UVa:10673 Play with Floor and Ceil

数学水题,列一个方程,直接暴力即可。#include #include #include #include #include #define MAXN 100000000#define ll long longusing namespace std;int main(){ int T; scanf("%d",&T); while(T--) {

2013-11-09 19:23:14 676

原创 POJ:1273 Drainage Ditches(网络最大流模版题)

第一次做网络流的题目,比着白书敲了一个EK算法,然后AC了。最大流理解的还不够深刻,还得研究研究。注意有重边。 #include#include#include#include#include#define MAXN 205#define INF 2000000000using namespace std;int main(){ int m,n; wh

2013-11-08 20:45:55 633

原创 POJ:1423 Big Number

问你一个数的阶乘是几位数。首先,N的位数等于logN+1向下取整。那么N!的位数就等于log(N!)+1向下取整,即log1+log2+……+logN+1向下取整打表可以AC。与阶乘有关的还有一个斯特林公式,有空研究下。#include #include #include #include #include #define MAXN 10000000using na

2013-11-08 17:56:41 650

原创 USACO Chapter1-Getting started Section 1.4

1.4依旧是暴力。有些题目很典型。 Packing Rectangles此题至今没过,其实是我感觉比较麻烦也没什么清晰的思路所以没写。以后再补充。 The Clocks这个题很好,是经典的BFS+判重,我狂WA,TLE,RE了N遍,总算是学会了隐式图遍历。如果某个钟表状态在之前出现过那么就不需要再加入到队列中了。由于不会哈希所以开了个9维数组判重。另外要开一个数组保存路

2013-11-08 12:35:50 684

原创 USACO Chapter1-Getting started Section 1.3

USACO题目还是不错的。 Mixing Milk一道水贪心,不能再水。/*ID:kkkwjx1LANG:C++TASK:milk*/#include #include #include #include using namespace std;struct Elem{ int cost,amount;};Elem p[

2013-11-08 12:25:53 632

原创 UVa:1428 Ping pong (树状数组)

如果之前做过树状数组求逆序数那再做这道题就很轻松了。枚举以每个人为裁判,有两种情况,左边的人值比裁判小右边的人比裁判大,左边的人值比裁判大右边的人值比裁判大。左右两边相乘,两种情况相加就是答案。第一种情况需要统计位于裁判左边值比它小的个数和位于右边值比它大的个数,而第二种情况可以由第一种情况推出来。所以重点就在统计位于裁判左边值比它小的个数和位于右边值比它大的个数。这就需要用树状数组了

2013-11-07 19:41:50 718

原创 POJ:2352 Stars(树状数组)

第一次写树状数组的题,居然1Y。好难得。首先将x坐标离散化,这样使每个x都对应一个序号。然后按顺序遍历所有点,对于每个点x的序号对应一个偶数的树状数组结点,求它之前的和就是该点的level,然后该位置加1。如此循环直到结束。 #include #include #include #include #include #define MAXN 32005using namesp

2013-11-07 13:50:18 719

原创 USACO Chapter1-Getting started Section 1.2

第二节没有什么难想的题,关于进制转换这块我不是很熟练(其实X进制跟10进制都一样),得补习一下。Milking Cows (milk2)区间问题,看数据用int似乎也应该能过。注意一点区间左右都是闭的,也就是说a在t时刻结束,b在t时刻开始,那么a和b属于连续的情况。/*ID:kkkwjx1LANG:C++TASK:milk2*/#include #incl

2013-11-06 22:54:59 604

原创 USACO Chapter1-Getting started Section 1.1

历时一个多月终于把USACO第一章做完了。虽然水题很多但也卡住我的地方,也说明了我基础还很有问题。本着保存代码的原则,把它们都贴上来了。 Your Ride Is Here (ride)大水题一道,通过这道题了解USACO代码的格式等等。/*ID:kkkwjx1LANG:C++TASK:ride*/#include #include #include using

2013-11-06 22:33:13 615

原创 UVa:590 Always on the run

之前理解错题意了。。关于航班的输入有n*(n-1)行。第一个n-1行表示城市1分别到城市2.3……n的航班,第二个n-1行表示城市2到1.3.……n的航班,依次类推。也就说不同城市之间的航班费用是不同的。至于状态转移方程倒不难想。dp[k][i]表示第k天到达i城市的最小费用则dp[k][i]=min{dp[k-1][j]+w}     j范围从1到n且j不等于i     w表示城

2013-11-06 10:13:40 662

原创 POJ:3617 Best Cow Line

一道简单贪心。我还是考虑不全面。比较原串首位第一个不相同的字母,然后决定删除的方向。注意不是只比较一个字母。如果只比较原串首尾第一个字母,如果两者相同就任意取的话,DCED这种样例是过不了的,即使过了DECD这个样例是过不了的。所以正确的思路是如果两者相同就比较下一对字母。。注意是下一对。另外每80个字符要换行。比较坑爹。。 #include #include #inc

2013-11-06 07:26:29 580

原创 UVa:11111 Generalized Matrioshkas

之前做数据结构遗留下来的一道简单题。用栈来做,思路不难想。定义一个结构体存尺寸和容积,读到负数则入栈,正数则岀栈(若栈空则false),如果栈顶元素尺寸与该正数巧合互为相反数(否则false),则将下一个栈顶元素的容积减去该正数,如果容积出现非正数则false。最后读完如果栈非空则false。可能我没仔细读题,被很多细节给坑了。有不合法的也就是不是成对出现的那种数据。 #inc

2013-11-05 20:32:43 584

原创 UVa:10803 Thunder Mountain(floyd求多源最短路)

我理解错题意了,其实是水题一道。问你所有顶点之间最短距离中最大的那一个是多少。如果任意两顶点之间没有最短距离那么输出Send Kurdy。floyd算法轻松搞定。。 #include #include #include #include #include using namespace std;int main(){ int T,kase=0; sca

2013-11-05 07:49:21 672

原创 POJ:1111 Image Perimeters

第一遍dfs八方向标记该物体,第二遍for循环遍历每个被标记对象统计它周围四方向“.“或者越界位置的个数。 #include#include#include#include#includeusing namespace std;char grid[30][30];int M[10][2]= {{1,0},{-1,0},{0,1},{0,-1},{1,1},{-1

2013-11-04 07:10:08 738

原创 POJ:2965 The Pilots Brothers' refrigerator(二进制枚举)

这个题用bfs搜索过不了了。于是上网学习了某位大神用位运算枚举的办法。。摘自discuss:首先应该明白两点:1 不论翻转执行的先后序列如何,结果都一样。2 每一个点(i,j)最多做一次翻转。(由1不难得到) 交C++反而比G++要快。。不可思议。。用0到2^16表示所有可能的翻转的位置,然后依次翻转看看是否得到全0即开的状态,如果可以则记录下最小值和这种该翻转情况。最后输

2013-11-03 13:03:45 587

原创 POJ:1753 Flip Game

网上说是枚举,我却用了BFS搜索的。看到discuss上说用位运算可以解决,代码很短,好神奇,有空研究下。。 #include#include#include#include#includeusing namespace std;struct State{ bool grid[6][6]; int step;};void Change(State &t

2013-11-01 22:21:16 566

空空如也

空空如也

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

TA关注的人

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