自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

已注销的博客

嘿你在看我博客!

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

原创 UVA 12097 Pie

思路给定N块半径分别为ri(i=1,2,..,N)的派,问若分给包括自己在内的F+1个人,每个人能分到的派最大是多少?错误的思路是以整数的形式考察r,这将得不到所有的结果,以浮点数的形式考察的思路也是不明晰的,每次的增减标准量应该设为多少?那么直接考察派的大小,可以尝试使用二分法去撞出合理的值。这里,简要的描述二分法。当左边的值相离右边的值的时候 取左右的中间值尝试 如果派不够分

2015-09-05 09:44:16 280

原创 UVA 10085 The most distant state

分析八数码,规则只能在3×3的棋盘里移动棋子,棋子只能移到空位。 本题需要求的是在移动的棋盘不重复的情况下可以移动的方式以及棋面。这是一题隐式图搜索。 给定一个棋面状态,向空白处移动,可以视为空白处向四个方向移动。这样以空白处为研究对象,搜路,直到搜遍整个棋盘。可以发现,相对这题更合适bfs,广度优先搜索而不是深度优先搜索,因为题目所需要的只是最后一个可达状态。下面简要的提出思路。从队列中取出一

2015-08-24 14:10:27 376

原创 UVA 10422 Knights in FEN

分析dfs 回溯可解。为什么不剪枝?因为暂时没有什么剪枝的思路。代码#include <cstdio>int G[5][5], startx, starty, min;int A[5][5] = {1,1,1,1,1, 0,1,1,1,1, 0,0,-1,1,1, 0,0,0,0,1, 0,0,0,0,0};int next[8][2] = {-2,-1, -2,1, -1,-2, -1,2,

2015-08-22 10:19:14 246

原创 UVA 10603 Fill

分析题目给出了三个只知道容量a、b、c 但不知道刻度的空杯子,现将容量为c 的杯子倒满水,问如何移动最小量的水 量出容量d 的水。输出d和最小量,如果不能量出,则输出尽可能接近d的d’和d’的最小量。如何倒水呢?a->b,a->c,b->a,b->c,c->a,c->b,总共六种方式。代码#include <cstdio>#include <cstring>#include <queue>#d

2015-08-21 16:47:55 357

原创 UVA 529 Addition Chains

分析给定一个数,尝试构造一个最短的数列,每一个数字由其之前的数字相加得,使得最后一个数字为所给数字。每一次尝试相加其实应该是前一个值尝试加上自它向前的所有值。例如5,尝试1,2,…,下一位应该先尝试4,再尝试3。这里注意需要剪枝!如何判断能否构造成功呢? 考虑一下上面的尝试方法,最大值是不是它的2倍呢?如果这个值在有限次数的翻倍也不能到达这个数,那么可以不用尝试了。至于最大长度16个数,还是一个m

2015-08-20 17:16:55 408

原创 UVA 317 Hexagon

分析六边形有六条边,三个方向(自顶向下,自左上向右下,自右上向左下)。 那么现给三组数据,每组数据有三个数值,分别对应三个方向的各自可选的三个值,另要求一个六边形任一方向上的两边的值相等,所以总共可以得到33=273^3=27个互异的六边形。现在需要你从这27个中选出19个拼成如题的形状,给定规则,如果某一方向上的值均相同,那么这个方向上的收益为该值乘以该方向上的六边形个数,综合15个收益,问总收

2015-08-19 13:03:20 289 1

原创 UVA 307 Sticks

分析将一些相同长度的木棍切成多段不超过50的小木棍,现在给出n条小木棍的长度。问原本木棍最短的长度。这里易知,木棍最短的长度理想是所给小木棍最长的长度,可以尝试性遍历所有的可能长度(木棍最多n条,长度最短max(s/n,m))。用这样一个长度尝试性地拼木棍,如果长度不够,那么继续下钻,如果长度合适,从头继续拼。如果遍历所有木棍都不能拼起,那么尝试下一个长度。代码#include <cstdio>#

2015-08-17 20:57:45 202

原创 UVA 10160 Servicing Stations

分析给定一些城镇和相邻关系,如果要建造服务站,服务站只能服务建造地所在的城镇和其相邻的城镇,问最少要建几个服务站?对每一个城镇,判断是否需要在此处建造服务站,即相邻的城镇是否还需要建站。如果不需要则此处不建站(如该镇自身未建站则需建站)。继续判断下一个城镇。这里进行了一定剪枝,如果当前城镇之前的城镇未能享受服务,并且其相邻的最大城镇小于当前城镇,即不可能再使之前那个城镇享受到服务,所以这种安排是不可

2015-08-17 18:14:37 368

原创 UVA 10123 No Tipping

分析这是一双支点的杠杆的题目,问初始时,依次有选择地拿去杠杆上的有质量的物块后,杠杆是否平衡。给出选择。杠杆如何平衡? 因为有两个支点,对于任一支点,如果左右两侧物块的力矩和相等,则杠杆平衡,若两支点均不能满足则杠杆失衡。 需要注意的是,因为杠杆本身具有重量,比如以右侧支点研究对象,那么杠杆可以视为距该支点1.5单位的一个质量为W的物块,会影响平衡。这里可以使用逆向思维,仅作思路简化。如何拿,不

2015-08-17 11:31:34 581

原创 UVA 193 Graph Coloring

分析复健,一题回溯。 与其他的二染色不同,本题需要穷尽所有可能,求其最多可染黑多少个点。思路对第i个点 如果i>V,是一个虚点,表示所有点已经探测完毕 比较染点个数,保存结果 如果i<V,是一个实点 遍历该点的所有路 如果相邻的点未染色,则染色并进入第i+1个点 将第i个点不染色(如过相邻的点染色也表示不染色)

2015-08-16 16:15:35 253

原创 UVA 1149 Bin Packing

分析至多俩,大小配。代码#include <cstdio>#include <algorithm>#define MAX_N 100005using std::sort;int N, L, A[MAX_N];void solve(){ sort(A, A+N); int l = 0, r = N-1, a = 0; while (l <= r) if

2015-08-10 13:23:44 323

原创 UVALive 3266 Tian Ji -- The Horse Racing

分析贪心,以最大的收益(最小的费用,即两匹马速度的差)与齐王赛马。思路如果 当田忌最慢的马比齐王最慢的马快,赢。否则 如果 当田忌最快的马比齐王最快的马快,赢。 否则 如果 当田忌最慢的马比齐王最快的马慢,输。 否则 平。代码#include <cstdio>#include <algorithm>#define MAX_N 1005using std::sort;

2015-08-10 10:31:14 413

原创 ACdream 1073 雷霆战机

分析题目长,理一理。Lv1 ---A---> Lv25 ---B---> Lv30 ---C---> Lv60 ---D---> Lv75需要完成的是从Lv1走向Lv75。这里选取A、B、C、D为主体,选取足够的经验球填充(或者选取当前经验为主体,每进一阶,将经验置为该阶的最低值,因为经验禁止溢出,也是因为这样所以放弃了这种考虑方式)。也就是说,需要挑选经验球来填A、B、C、D这四个经验池。 如

2015-08-09 22:54:46 377

原创 UVA 11292 Dragon of Loowater

分析虽然屠龙的勇士极其勇敢,但是这题难度并不高。斩杀n头龙并没有指定从哪一个头开始,也没有指定从哪一个勇士开始。那么斩头的策略应该是由小及大,这样,可以让勇士由小及大的斩杀,遍历所有的勇士,斩尽其能斩之头,终得如下代码。代码#include <cstdio>#include <algorithm>#define MAX 20005using std::sort;int H[MAX], C[MA

2015-08-09 22:41:13 253

原创 UVA 639 Don't Get Rooked

分析摆棋盘,但是只需要判断横纵有阻隔或者不能多个。所以只需要回溯法,先摆上再检查,如果不能这么摆再拿掉继续尝试。每完成一次棋盘取最大值即得到答案。代码#include <cstdio>#define MAX_N 5char G[MAX_N][MAX_N];int N, max;bool check(int x, int y){ int next[4][2] = {{0,1}, {0,-

2015-08-06 17:08:19 241

原创 UVA 216 Getting in Line

分析一题普通的题目。需要你选择最短的一条路连接多台计算机。 问题在于选哪两台连接?暴力求解。假设把计算机标号,求其全排列。 对于每一个排列,两两求路径,累加求总长,如果累加过程中已经大于等于最小值,可以直接返回,无需再计算(不过这么做好像并没有什么卵用..)。如果小于,则更新要输出的答案,简单粗暴。思路对于{0,1,2,...,n−1}\{0,1,2,...,n-1\}如何全排列?int per

2015-08-06 16:09:50 275

原创 UVA 10054 The Necklace

分析以颜色为点,线为边,判断是否有欧拉回路(偶数结点度数),输出这条通路(dfs)。代码#include <cstdio>#include <cstring>#define MAX_V 55#define MAX_E 1005int G[MAX_V][MAX_V], E, node[MAX_E][2], top;void dfs(int u){ for (int v = 1; v <

2015-08-06 09:53:14 261

原创 HDU 2553 N皇后问题

分析一题经典的回溯法,需要打表。代码#include <cstdio>#define MAX_N 11int n, res;int c[MAX_N], ans[MAX_N];void dfs(int cur){ if (cur == n+1) res++; else for (int i = 1; i <= n; i++) { c[cur] = i;

2015-08-05 20:45:48 284

原创 UVA 729 The Hamming Distance Problem

分析Hamming distance,汉明距离,举一些栗子。"karolin" and "kathrin" is 3."karolin" and "kerstin" is 3.1011101 and 1001001 is 2.2173896 and 2233796 is 3.题目给定字符串的长度NN和汉明距离HH,按字典序输出长度为NN且与all 0的汉明距离为HH的字符串。 其实只需要填充

2015-08-05 19:22:45 307

原创 UVA 10098 Generating Fast

分析给一串,要求输出其字典序全排列。 相对需要注意的是,该串可能有重复数字,并且不应输出重复的排列。这里可以在填充每一格的时候,检查一下当前已经填充的格子里和这格相同的有几个,判断有没有超过给定串里头的限定个数,如果没有可以填充。另外不能重复,可以考虑使用这一格前,检查上一次使用的格是不是和这格内容一致,如果一致那么因为只考虑内容重复,会导致再输出一组重复排列。当然,使用next_permutat

2015-08-05 16:23:18 307

原创 UVA 146 ID Codes

分析求下一个排列,next_permutation()好好好。 举一个栗子,aaabbc的排列是什么?编写一个简单的代码生成排列。#include <cstdio>#include <cstring>#include <algorithm>using std::sort;char s[50], a[50];int l;void print_permutation(int cur){

2015-08-05 15:15:02 264

原创 UVA 11205 The broken pedometer

代码#include <cstdio>#define MAX_N 105#define MAX_P 20int P, N, M;int led[MAX_N][MAX_P];int a[MAX_N];int flag[MAX_P];void judge(){ int set_size = 0, idx = 0; for (int i = 0; i < P; i++)

2015-08-05 10:58:45 245

原创 UVA 10167 Birthday Cake

分析对于一条直线Ax+By=0Ax+By=0,如果一点(a,b)(a,b)满足Aa+Bb>0Aa+Bb>0则该点位于该直线上方,满足Aa+Bb<0Aa+Bb<0则该点位于该直线下方,满足Aa+Bb=0Aa+Bb=0则该点位于该直线上。 直接枚举所有可能的AA、BB,只要上方和下方的个数均等于NN,枚举结束。思路因为如果存在一颗樱桃在这个切割线上,那么一定不能如此切割,所以如果存在一点在该线上,那么

2015-08-05 09:25:52 257

原创 HDU 5301 Buildings

分析你当前的任务是要为将于HZXJHS建造的住宅楼做一份地面规划。所以你需要找到一个合理的方式划分地面以建造矩形的楼墙。每一面墙都应该和建筑物的边平行。这块地皮可以视为一个长宽n×mn \times m的矩形,在这块地皮上规划一每栋占地占地a×ba\times b的楼群。对于每一栋楼,其占地面积可以与其他楼不同。但其长宽abab都应是正整数。另外,这些楼群必须完全覆盖这块地皮,除了一个预先规划的位于

2015-08-04 21:52:49 279

原创 HDU 5319 Painter

分析画布上有\的R和/的B以及相交处的G,问画了几笔?首先明确R只会是\画的,B只会是/画的。并且每一笔必然是一笔到底,两个端点顶到了画布的边界。那么需要的是遍历整个画布,如果找到一条\(两点确定一条线),那么这条\就不应该再计数。考虑可以使用一个循环,滚一遍这条边把它置空(.)。当然,这里可以做一个简单的判断,因为是一笔到底,那么如果这是这笔画的头才计数,也能达到数笔画的效果。同理如果找到一条/也

2015-08-04 21:03:46 281

原创 HDU 5327 Olympiad

分析所以和奥运会并没有什么关系。beatiful number被定义为一个各位数字均不重复的数字。给定一闭区间,问该区间有多少beatiful number。因为本题的区间长度是不固定的,所以考虑规律是比较不合理的。那么需要确实地计算该区间的每一个数,为了防止RE,可以采取预处理,处理输入前先处理好输入范围内的数据,即到给定这位之前有多少个beatiful number(递推关系)。这样,得到输入数

2015-08-04 20:37:18 384

原创 CodeForces 560C Gerald's Hexagon

分析顺时针给一六边形的各边长,问该六边形有几个边长为1的小三角形。首先考察是否有规律可循,显然,变量太多,直接通过边长考察个数可能不好。 其实可以间接地通过剥洋葱的方法一层一层剥过去。边长为n的边,可以为这个六边形贡献2n-1个小三角形,再向内缩短边长形成一个六边形直至无法形成六边形,例如线、三角形、菱形再特判。但是这样也较为麻烦。既然通过边长数这个方向不好,那么可以尝试通过面积,每一个小三角形的

2015-08-04 20:22:54 594

原创 CodeForces 560A Currency System in Geraldion

分析问一仅有n种面额的货币系统是否存在一个不能组合的金额,如果存在,输出最小的金额,如果不存在输出-1。 简单的考虑一下货币,比如1、2、5,这些我们常见的小额币值能够表达我们日常所有的金额。再考虑一下,所有的金额其实都能拆分为1(比如用许多许多1块钱买辆车…),所以这道题目,只需要考虑这个系统是否提供了面额为1的货币。代码#include <cstdio>int main(){ int

2015-08-04 19:57:04 548

原创 UVA 10557 XYZZY

题目XYZZY分析有这样的一个游戏,游戏中有许多房间,开始时主角拥有100的体力,每进入一个房间都会消耗或增加房间对应的体力值,同时每个房间的出口不唯一,如果在到达最后一个房间前体力归零,GAME OVER && YOU LOST。显然主角应该尽可能地避免走入会消耗体力值的房间,如果无法避开,那么主角要有足够的体力值才可以尝试进入,可以发现如果有这么一个环路连通两个或者多个房间能够不断恢复体力,

2015-08-03 16:10:23 371

原创 UVA 10596 Morning Walk

题目清晨漫步分析Kamal需要从Dinajpur步行到Chittagong,路途中总共有N个路口、R条路(即某路口到某路口有路),问是否存在这样一条路线,能不重复的往返走完全部的路。 把路口视为点,把路视为边,这是一题典型的欧拉回路问题,有这样的推论。 无向图G具有一条欧拉回路,当且仅当G是连通的,并且所有结点度数全为偶数。所以,关键在于如何实现判断(1)连通(2)偶数结点度数。思路首先考

2015-08-03 15:43:37 406

原创 UVA 10004 Bicoloring

题目二染色分析用两种颜色染一强连通 无向图。代码#include <cstdio>#include <cstring>#include <vector>#define MAX_V 205using std::vector;vector<int> G[MAX_V];int V, E;int color[MAX_V];bool dfs(int v, int c){ color[v]

2015-08-03 09:37:05 209

原创 UVA 439 Knight Moves

题目骑士移动分析bfs.代码#include <cstdio>#include <cstring>#define N 9int map[N][N];struct point { int x, y, s;} que[N*N];int head, tail;int next[8][2] = {{2, 1}, {1, 2}, {2,-1}, {1, -2}, {-2, -1}, {-1

2015-07-31 21:23:52 233

原创 UVA 784 Maze Exploration

题目迷宫探索分析给一迷宫,将能走的范围标记为#.思路还是熟悉的味道,遇到展开dfs搜索。样例INPUT 7 AAAAAAAAA  A   A   A A * A   A A   A   A AAAAAAAAA _________ BBBBB   BBBBB B   B   B   B B * B   B   B B   B   B

2015-07-31 16:50:39 315

原创 UVA 657 The die is cast

题目掷色子分析给一张低像素图啊,数色子点数,排序输出。 色子不重合; 图中可能没有色子; 点数彼此不紧贴; 每组测试数据第一行依次读入的是列数和行数。 思路遍历图,找到*即意味着找到了色子,dfs把整个色子置为.表示这个色子已经被搜索到,在dfs过程中如果找到X即意味这找到了点数,再dfs把点数置为*(因为一个点数可能不止一个X符号表示)。样例INPUT 10 6

2015-07-31 15:57:16 247

原创 UVA 572 Oil Deposits

题目油田分析给一油井分布图,相邻的油井开采的是同一油矿。问共有几个油矿。思路找到一个油井,计数增一,同时将与之相邻的油井全部盖上(dfs或bfs),再继续寻找油井。代码#include <cstdio>#define N 102int m, n;char map[N][N];int next[8][2] = {{-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1

2015-07-31 09:59:09 222

原创 UVA 10194 Football (aka Soccer)

题目足球分析这题目不难但是很烦,按建议使用了结构体。代码#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>char name1[35], name2[35];struct model{ char name[35]; int point, played, win, tie, los

2015-07-30 16:13:37 236

原创 ACdream 1125 ACfun

题目ACfun分析给出一由A和C组成的字符串,求一由A和C组成满足字典序且最短的非子串的字符串。思路小小推敲一下,要求的字符串只可能是A,长度应为所给字符串连续A子串的长度+1。代码#include <cstdio>#include <cstring>int main(){ char s[105]; int t; scanf("%d\n", &t); while

2015-07-30 14:26:26 309

原创 HDU 1283 最简单的计算机

题目最简单的计算机分析简单的字符匹配。代码#include <cstdio>#include <cstring>int main(){ int m1, m2, r1, r2, r3; char o[205]; while (~scanf("%d%d", &m1, &m2)) { r1 = r2 = r3 = 0; scanf("%s", o

2015-07-30 14:21:51 277

原创 HDU 4730 We Love MOE Girls

题目We Love MOE Girls分析简单的字符串匹配。代码#include <cstdio>#include <cstring>int main(){ int t; char s[1010]; scanf("%d", &t); for (int i = 1; i <= t; i++) { printf("Case #%d: ", i);

2015-07-30 14:19:50 213

原创 HDU 1021 Fibonacci Again

题目Fibonacci Again分析给出一斐波那契数列f(n)f(n),给出nn,问3是否能整除f(n)f(n)。思路 递归求f(n)f(n)->Runtime Error(ACCESS_VIOLATION);初始化f[n]f[n]->Wrong Answer(又溢出啦);找规律! 7 no 11 no 18 yes 29 no 47 no 76 no

2015-07-30 14:17:17 202

空空如也

空空如也

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

TA关注的人

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