- 博客(86)
- 资源 (5)
- 收藏
- 关注
原创 UVa11582 - Colossal Fibonacci Numbers!(模运算)
#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef unsigned long long ULL;const int maxn = 1005;int f[maxn][6*maxn],p[maxn];int
2015-04-30 16:37:18 1494
原创 同余与模运算
发现自己还是看书少了,能从书上学到不少东西。加减乘的模运算:#includeusing namespace std;int mul_mod(int a,int b,int n){ a %= n; b %= b; return (int)((long long)a * b % n);}///如果n本身超int,就要用高精度了int add_mod(int a,int
2015-04-30 07:35:36 1343 3
原创 UVa1603 - Square Destroyer
题意:给定一个火柴棒拼成的方格阵,然后去掉一些火柴棒,问至少再去掉几根火柴棒能够让图中一个正方形都没有。思路:1. 由于题目中给定了 n 的范围,2 * n * (n + 1) 所以能够保证所有的火柴用 __int64 的位运算表示;2. 问题的关键在于如何生成火柴构成的方阵,以及生成方阵之后如何去搜索;3. 启发式函数 h 的计算需要考量:如果删除了某个
2015-04-29 21:22:49 1763 1
原创 位运算符
最近用的很多,快快熟悉。=== 1. and运算 ===and运算通常用于二进制取位操作,例如一个数 and 1的结果就是取二进制的最末位。这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数。相同位的两个数字都为1,则为1;若有一个不为1,则为0。0010111100(&;或者and)----------
2015-04-29 20:37:15 520
原创 UVa1602 - Lattice Animals
输入n,w,h(1回溯求解,首先确定搜索对象,格子连通,所以把连通块作为搜索对象,每次枚举一个位置,然后放一个新的块,最后重判。每个连块会被枚举很多次,有方法可以确保每个n连块恰好被枚举一次。用函数generate()把每种情况枚举出来。#include#include#include#includeusing namespace std;struct Cell{
2015-04-29 19:40:36 1384 1
原创 UVa414 - Machined Surfaces
#include#includeint main(){ int k,m,n,i,j,sum,min; char str[100000]; while(scanf("%d%*c",&n)&&n) { sum=0; for(i=0;i<n;i++) { gets(str);
2015-04-29 09:37:00 550
原创 UVa1601 - The Morning after Halloween(单向+双向BFS)
给出一个最大为16×16的迷宫图和至多3个ghost的起始位置和目标位置,求最少经过几轮移动可以使三个ghost都到达目标位置。每轮移动中,每个ghost可以走一步,也可以原地不动,需要注意的是任意两个ghost不能在相同的位置,因此也不能出现任意两个ghost对穿,也就是原来是ab,移动之后是ba。每个迷宫图'#'表示墙,' '表示空地,小写字母表示ghost的起始位置,大写字母表示对应ghos
2015-04-29 09:27:59 946
原创 UVa490 - Rotating Sentences
虽说是水题,但是改来改去也用了很多时间,要注意代码的质量和正确性。一定要想清楚再写,后来没去中间的输出wa了两次。#include#includeusing namespace std;char a[105][105];int main(){ int hang=0,maxn=0; while(gets(a[hang]) ){ if(strlen(a
2015-04-29 09:17:42 810
原创 UVa10603 - Fill
分析:取出水量最少的节点进行扩展,这样的程序只需要把队列queue换成优先队列priority_queue,其他部分的代码不变,下面的代码把状态(三元组)和dist合起来定义为一个Node类型,是一种常见的写法,如果要打印路径,需要把访问过的所有节点放在一个nodes数组中,然后在Node中加一个变量fa,表示父节点在nodes数组中的下标,而在队列中只存在节点在nodes数组中的下标而非节点本身
2015-04-28 15:08:19 935
原创 UVa1343 - The Rotation Game
因为8个转轮对应的位置比较没有规律,需要提前将这些位置存在数组中,方便旋转操作和回溯法的归位操作。利用数组来人为储存没有规律的数字。IDA*合了bfs步数最少和dfs字典序最小的优点。#include#include#define maxn 500using namespace std;int block[24];int roller[8][7]={{0,2,6,1
2015-04-28 13:38:54 1078
原创 八数码问题
八数码问题:编号为1~8的8个正方形滑块被摆成3行3列(有一个格子留空),每次可以把与空格相邻的滑块(又公共边才算相邻)移动到空格中,而他原来的位置就成了新的空格,给定初始局面和目标局面(0表示空格),你的任务时计算出最少移动的步数,无法达到输出-1.样例输入:2 6 4 1 3 7 0 5 88 1 5 7 3 6 4 0 2样例输出:31分析:把八数
2015-04-28 10:31:49 1253
原创 qsort快排c语言和c++应用
C语言中用qsort()快速排序C语言中排序的算法有很多种,系统也提供了一个函数qsort()可以实现快速排序。原型如下: void qsort(void *base, size_t nmem, size_t size, int (*comp)(const void *, const void *));
2015-04-28 10:10:48 875
原创 11300 - Spreading the Wealth
(解方程建模+中位数求最短累积位移)分金币(Spreading the Wealth, UVa 11300) 圆桌旁坐着n个人,每人有一定数量的金币,金币总数能被n整除。每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等。你的任务是求出被转手的金币数量的最小值。比如,n=4,且4个人的金币数量分别为1,2,5,4时,只需转移4枚金币(第3个人给第2个
2015-04-28 00:36:49 600
原创 11729 - Commando War
【题目翻译】:【思路】:贪心算法:处理时间长的先交代。按照J从大到小的顺序给任务排序,依次交代。#include#includetypedef struct Time{ int B; int J;}Time;int cmp(const void *a,const void *b){ struct Time * c = (Time
2015-04-28 00:03:15 827 1
原创 《算法竞赛入门经典——训练指南》第一章算法分类
问题求解策略 (General Problem Solving Techniques)例题 (Examples) 例题 1UVa11292The Dragon of Loowater排序后用贪心法 例题 2UVa11729Commando War用贪心法求最优排列;用“相邻交换法”证明正确性
2015-04-27 23:44:31 1022
原创 11292 - Dragon of Loowater
例题1 勇者斗恶龙(The Dragon of Loowater, UVa 11292)你的王国里有一条n个头的恶龙,你希望雇一些骑士把它杀死(即砍掉所有头)。村里有m个骑士可以雇佣,一个能力值为x的骑士可以砍掉恶龙一个直径不超过x的头,且需要支付x个金币。如何雇佣骑士才能砍掉恶龙的所有头,且需要支付的金币最少?注意,一个骑士只能砍一个头(且不能被雇佣两次)。【输入格式】
2015-04-27 23:39:12 915 3
原创 12558 - Egyptian Fractions (HARD version)
#include#include#include#includeusing namespace std;typedef long long LL;const int maxn=10010;int maxd,t,tt;set sk;LL ans[maxn],v[maxn];LL gcd(LL a,LL b){ return b?gcd(b, a%b):a;}LL ge
2015-04-27 23:11:27 1021 2
原创 校赛总结
算是第一次参加大规模的比赛,而且是个人赛,前1个多小时都没出题,我也是醉了,究其原因,无非就是紧张,但最重要的还是平时努力不够,后来出了5个题,其他的感觉能做,但就是做不出来,只能说题量还是不够。再说说最近几天的状态,校赛确实是有点累,但校赛过后的状态确实很差劲,想刷题只停留在了想的层面,自己又开始犹豫上课还是逃课,刷题还是打游戏的问题,如若一定时间就犹豫几次,我定是出不了什么成绩的,机房可以
2015-04-27 22:20:22 630
原创 UVa11212 - Editing a Book
#include#include#includeusing namespace std;class Board{public: int a[16]; int h; int n; bool readIn() { int i; scanf("%d",&n); if(n == 0) return fals
2015-04-27 15:57:08 993
原创 埃及分数问题
样例输入:495 499样例输出:495/499 = 1/2+1/5+1/6+1/8+1/3992+1/14970规则是加数少比加数多好,加数相同,小的数越大越好。分析:回溯无限,宽度优先便利一层都跑不完,所以用迭代加深搜索(iterative deeping):从小到达枚举深度上线maxd,枚举上限还可以减枝。IDA*算法:深度上线maxd,当前节点n的深度为g(n),乐观估价
2015-04-27 14:03:35 1028
原创 2014上海全国邀请赛——题目重现 4.24
连接:http://acm.hdu.edu.cn/search.php?field=problem&key=2014%C9%CF%BA%A3%C8%AB%B9%FA%D1%FB%C7%EB%C8%FC%A1%AA%A1%AA%CC%E2%C4%BF%D6%D8%CF%D6%A3%A8%B8%D0%D0%BB%C9%CF%BA%A3%B4%F3%D1%A7%CC%E1%B9%A9%CC%E2%C4%
2015-04-25 23:23:21 695
原创 sdut-2159 Ivan comes again!(set+线段树)
Ivan comes again!Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^题目描述The Fairy Ivan gave Saya three problems to solve (Problem F). After Saya finished the first problem
2015-04-25 23:12:32 542
原创 HDU 1576 A/B (扩展欧几里德算法)
连接:http://acm.hdu.edu.cn/showproblem.php?pid=1576Sample Input21000 5387 123456789 Sample Output79226060题意:要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) =
2015-04-25 22:52:49 615
原创 gcd() 最大公约数
递归gcd()int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}特点及意义 最大公约数指某几个整数共有因子中最大的一个。 例如,12和30的公约数有:1、2、3、6,其中6就是12和30的最大公约数。 两
2015-04-25 22:22:02 972
原创 线段树
线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O
2015-04-25 14:11:15 365
原创 SDUT2159 Ivan comes again!(省赛原题)(STL)
题目连接:http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2159&cid=1172示例输入4add 2 3find 1 2remove 2 3find 1 20示例输出Case 1:2 3-1题意:跟hello world题意差不多,第一行N个操作,“add”是加入容器一个
2015-04-25 10:50:54 602
原创 山东省第一届ACM大学生程序设计竞赛(原题) 回顾 4.18
Phone Number 题目链接:http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2151&cid=1172题意很简单:给出N行电话号码,寻找有没有一串是另一串的前缀,有的话输出No,当然两个一样的也是No题解:没有前缀0,直接用二维数组存,大循环就行了,用strcmp比较相等。不会超时。Hello World! 题
2015-04-25 10:18:35 1112
原创 UVa 12113 - Overlapping Squares
用到位运算,提前要对表进行求值#include#include#include#include#includeusing namespace std;const int maxn=(1<<9);int a[9][8]={{1,3,9,13,18,19,21,22}};int clean[9][4]={{10,11,12,20}};void init(){ int k
2015-04-22 17:35:19 1040
原创 next_permutation函数
这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件下面是以前的笔记 与之完全相反的函数还有prev_permutation (1) int 类型的next_permutation int main(){ int a[3];a[0]=1;a[1]=2;a[2]=3; do{cout} while (next_permutat
2015-04-22 17:15:57 427
原创 SDUT2155 Emergency(第一届省赛题)(弗洛伊德算法)
题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2155题意大概一个地方所有城市被侵占开始解放每个城市,一个人要从解放的城市到达另一个解放的城市,所有需要求所有两个城市的最短路径N个节点 M个边 Q个操作接下来M行 每行表示一条高速公路连接x,y 长度为z接下来Q个操作 操作
2015-04-21 23:20:33 811
原创 SDUT2156 Fairy tale(第一届省赛题目)(模拟)
题目连接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2156题意大概:一个迷宫,每个用WESN表示,每一个时刻都会发生变化,变化规律为E to W, W to S, S to N, and N to E.人开始的位置在(0,0)宝藏开始的位置在右下角。宝藏每一个时间段都会跟着迷宫上的字母
2015-04-21 15:02:14 571
原创 HDU1035 Robot Motion
很水的模拟题,把-号写成了=号,找了一个小时我也是醉了,但发现自己比原来还是进步了#include#include#includeusing namespace std;const int maxn = 100;char map[maxn][maxn];int vis[maxn][maxn];int main(){ int m,n,x; while(scanf(
2015-04-20 20:24:20 677 2
原创 HDU4255 A Famous Grid
#include#include#include#include#define N 40400#define MAX 210#define CNT 4400using namespace std;bool isprime[N];int prime[CNT],cnt;int map[MAX][MAX];bool visited[MAX][MAX];struct point {
2015-04-18 15:40:40 601
原创 蛇形表(递归打印)
#include#include#includeusing namespace std;int map[20][20];void build_map(int p,int q,int s,int c){ if(s==0) return; int i; for(i=q;i<q+c;i++) map[p][i]=s--; for(i=p+1;i<p+c;i++
2015-04-18 14:48:18 603
原创 打印素数表(牢记)
#include#include#includeusing namespace std;bool isprime[100];int prime[100];int main(){ memset(isprime,true,sizeof(isprime)); isprime[1]=false; int cnt=0; for(int i=2;i<100;i++
2015-04-18 14:26:16 811
原创 UVa537 - Artificial Intelligence?
#include#include#include#includeusing namespace std;int main(){ int T; cin>>T; getchar(); for(int case_num=1;case_num<=T;case_num++) { string line; getline(ci
2015-04-18 12:19:45 571
原创 UVa10010 - Where's Waldorf?
#include#include#include#includeusing namespace std;const int MAX=50+5;char s[MAX][MAX],word[MAX];void f(int m,int n,int len){ int i,j,k,x,y,cfind; for(i=0;i<m;i++) { for(j
2015-04-18 11:59:59 522
原创 UVa10361 - Automatic Poetry
#include#include#define N 110int main(){ int i,j,Case,lena,lenb; char a[N],b[N],s[N],s1[N],s2[N],s3[N],s4[N],s5[N]; while(scanf("%d\n",&Case)!=EOF){ while(Case--){
2015-04-18 11:58:38 479
原创 HUD4256 The Famous Clock
int main(){ int kase = 0; char s[50]; while( scanf("%s",s)!=EOF ){ printf("Case %d: ",++kase); if( !strcmp(s,"I") ) printf("1\n"); if( !strcmp(s,"II") ) print
2015-04-17 22:24:10 402
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人