自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 资源 (2)
  • 收藏
  • 关注

原创 斐波纳契数列(Fibonacci Sequence)

斐波纳契数列(Fibonacci Sequence) 0.前言很久以前就想写一些竞赛学习的总结,但是由于之前事情比较多,导致计划不断的减缓。现在,大学教学任务的考试已经全部结束了,而比赛也告一段落,所以有时间来整理一下之前学过的东西。不久前,在做比赛的时候遇到了这样一个问题:求出第N个斐波纳契数的前M位和后K位。所以就将斐波纳契数列(Fibonacci Sequence)作为第一步

2012-11-25 14:21:15 6246

原创 UVa 11347 - Multifactorials

题目:求一个数字n多阶乘的因子的个数。分析:组合数学、数论。求出所有的素数因子的个数,然后利用组合数公式求解即可。结果为π(pi+1),其中pi为第i个素数因子的个数。注意:数据过大会超出整形,但是利用double即可。#include #include #include char c[1005];int f[1005];int p[1005];int u[10

2012-11-29 20:11:45 1752

原创 UVa 10334 - Ray Through Glasses

题目:求在3快玻璃间反射k次的光线条数。分析:找规律,fib。可以找到规律,f(k) = f(k-1)+f(k-2)。光线分为两种:距离外阶有1层玻璃和距离外界有2层玻璃。距离外界有2层玻璃的光线是上次反射出去的光线,距离外界有1层玻璃的光线是上上次反射出去的光线,所以满足fib数列。注意:数据较大有208位,要用大整数模拟。#include #include #include

2012-11-29 19:57:04 1434 3

原创 UVa 763 - Fibinary Numbers

题目:斐波那契进制加法。分析:模拟、大整数。先将两数装换成10进制加和,再转化回Fib进制数即可。注意:fib(100)超过long long类型。#include #include #include char a[105];char b[105]; int F[105][31];int c[105];int V[31];int cmp( int *a, in

2012-11-29 19:18:23 1264

原创 UVa 481 - What Goes Up

题目:最大上升子序列。分析:dp、lis、二分、单调队列。LIS的O(nlogn)算法。此算法,利用单调队列+二分优化。单调队列里的元素Q[i]为,到目前为止、长度为i的LIS中最小的结束元素。运行过程中,如果当前元素小于队尾元素,则可以和前面的构成LIS,直接加入队尾,否则替换之前的长度相同的LIS的结尾元素,使对应位置上的元素变小,由于队列满足单调性,所以利用二分查找提高效率。例如:序列为

2012-11-27 14:45:27 2264

原创 UVa 10340 - All in All

题目:判断a串是不是b串的子串。分析:暴力。直接利用一根指针跟踪a串即可。时间复杂度T = O(min(len_a,len_b))。注意:要利用cin,用scanf会TLE。#include #include #include using namespace std;char str[ 100005 ];char val[ 100005 ];int main(){

2012-11-26 14:13:37 3093 3

原创 UVa 10305 - Ordering Tasks

题目:求出满足对应顺序的序列。分析:图论、拓扑排序。知道起点用dfs效果更好,不知道可以暴力。#include #include #include int edge[105][105];int list[105];int used[105];int main(){ int n,m,a,b; while ( scanf("%d%d",&n,&m) && n ) {

2012-11-26 13:00:41 1067

原创 UVa 10192 - Vacation

题目:最大公共子序列或最大上升子序列。分析:dp、LIS或LCS。LIS和LCS之间课转换,按串1的顺序求串2的LIS即可。#include #include #include char str[ 128 ];char val[ 128 ];int f[ 128 ][ 128 ];int main(){ int T = 1; while ( gets(val) &

2012-11-26 11:27:45 854

原创 UVa 11151 - Longest Palindrome

题目:求最常回文子串。分析:dp、LCS,求一个串的最常回文子串就是本串与翻转串之间的最大公共子序列。注意:数据中有空串。#include #include #include char string[ 1005 ];char revstr[ 1005 ];int f[ 1005 ][ 1005 ];int main(){ int T; while ( scan

2012-11-26 03:41:27 1459

原创 UVa 443 - Humble Numbers

题目:求由{2,3,5,7}组成那的数字集合的第n个数字。分析:利用4根指针,对应每个数字当前对应的因子,每次取最小的数值,指针后移。注意相等的情况。注意:输出的计数法。#include #include #include int d[ 5850 ];int v[4] = {2,3,5,7};int p[4] = {1,1,1,1};int main(){ in

2012-11-26 00:55:27 1751

原创 UVa 350 - Pseudo-Random Numbers

题目:随机数产生器 L = (L*Z+I)%M。分析:简单题、模拟。很多计算机上的随机数就是利用循环节等于M的四元组构造出来了,而L通常取当前时间。注意:初始的L不一定是循环节中的元素。#include #include #include int used[ 10001 ];int main(){ int Z,I,M,L,C = 1; while ( scanf("%

2012-11-25 13:49:20 2700 4

原创 UVa 324 - Factorial Frequencies

题目:计算n!每位上的数字出现的次数。分析:简单题、模拟。大数计算,先计算大数阶乘,然后统计即可。注意:366!有760位左右,注意数组大小。#include #include #include int ans[ 201 ];int bit[ 10 ];void countbit( int f, int v ){ if ( !f ) { while ( v ) {

2012-11-25 13:13:54 1558

原创 UVa 623 - 500!

题目:大整数阶乘计算。分析:简单题、模拟。大数计算,可以采用位数压缩,节约时间空间。把k位存入一位,每次10^k进位即可,利用%0kd输出很方便。注意:500!有2632位,位数开少会WA。#include #include #include int ans[ 451 ];int main(){ int N; while ( scanf("%d",&N) != E

2012-11-25 12:56:22 1024

原创 UVa 10591 - Happy Number

题目:求一个数每个数位上数字的平方和,为最后是否能转换化1。分析:简单题、数论。求循环节。因为9^9*9 #include #include #include int used[ 1000 ];int bitsv( int v ){ int sum = 0; while ( v ) { sum += (v%10)*(v%10); v /= 10; } retu

2012-11-25 12:25:45 978

原创 UVa 543 - Goldbach's Conjecture

题目:歌德巴赫猜想,给出一个数字给出两个奇素数使得和为这个数字。分析:简单题、数论。首先打表求出1000000以内的素数,然后枚举即可。#include #include #include int used[ 1000005 ];int prim[ 1000005 ];int main(){ int n,count = 0; memset( used, 0, sizeo

2012-11-25 12:07:09 1122

原创 UVa 374 - Big Mod

题目:求 (B^P)mod M。分析:简单题、分治。快速模幂算法。注意:P可以为0,要特判,否则会RE。#include #include int spow( int b, int p, int m ){ if ( p == 0 ) return 1; if ( p == 1 ) return b; int a = spow( b, p/2, m ); if ( p%2

2012-11-25 11:44:13 1566

原创 UVa 10346 - Peter's Smokes

题目:有n根雪茄,每次抽完会剩下一部分,剩下部分的k根还可以组成一根,问一共可以出现多少根雪茄。分析:简单题。利用一个变量last储存当前剩下部分的数量,则可以组成新的雪茄数量就是last/k,新的剩下的部分是last/k + last%k(新组成的剩下的部分+上次没有组成新的雪茄的剩下的部分)。#include #include #include int main(){ in

2012-11-25 11:08:37 1245

原创 UVa 11495 - Bubbles and Buckets

题目:求给定序列的逆序数。分析:分治、逆序数、归并排序。利用mergesort求逆序数,时间复杂度O(nlogn)。一个序列的逆序数 = 左半序列的逆序数+右半序列的逆序数+两半之间的逆序数。因为每半序列是排好序的,所以逆序数为合并时每次选择右半段序列的元素时,左序列还留有的元素个数。#include #include #include int P[ 100005 ]; int

2012-11-23 17:57:23 1583

原创 UVa 116 - Unidirectional TSP

题目:求从左到右的一条路径上的加和最小。每次可以采取本行、上行和下行的走法。分析:dp。数塔变形,由于要求最小序列,所以采取从右向左dp、可以保证右边的都是最小序列,每次记录后继节点,输出即可。注意:在最上和最下两行有可能行的编号编程最大和最小的。#include #include #include int mat[ 12 ][ 102 ]={0};int sum[ 12

2012-11-22 15:18:48 880

原创 UVa 10928 - My Dear Neighbours

题目:求一个有向图中出度最少的节点。分析:简单题、图论。统计每个节点度数,比较大小输出。注意:有向图。#include #include #include int edge[ 1005 ]; int main(){ int T,P,M; while ( scanf("%d",&T) != EOF ) { getchar(); for ( int t =

2012-11-22 10:38:33 1017

原创 UVa 105 - The Skyline Problem

题目:在一个平面上给出n个底边共线的矩形,求出所有的高度的转折点。分析:简单题、暴力。由于数据范围是:区间个数5000、区间大小10000,直接利用10000的数组记录每个点的高度,不断在上面更新,最后扫描一遍数组即可。注意:如果h[i-1] #include #include #include int H[ 10005 ] = {0};int main(){ int

2012-11-21 10:02:19 2527

原创 UVa 111 - History Grading

题目:最大公共子序列。分析:dp、LIS或LCS。最大上升子序列或最大公共子序列。当元素不重复时LCS可以转化为LIS,对应B序列每个元素转化为在A序列中的位置,求转化后序列的LIS即为两序列的LCS、可以用单调队列优化为O(nlogn)。注意:输入给的是元素对应的顺序号需要转换、输入时使用while( cin )会导致WA。LCS:#include #include #i

2012-11-20 21:27:43 645

原创 UVa 10055 - Hashmat the Brave Warrior

题目:输出差值的绝对值。分析:简单题。注意:数据类型要用long long、不要使用abs()。#include #include #include int main(){ long long a,b; while ( scanf("%lld%lld",&a,&b) != EOF ) if ( a > b ) printf("%d\n",a-b); els

2012-11-20 18:31:27 1275

原创 UVa 10071 - Back to High School Physics

题目:输出输入乘积的2倍。分析:简单题。OvO。#include #include #include int main(){ int a,b; while ( scanf("%d%d",&a,&b) != EOF ) printf("%d\n",2*a*b); return 0;}

2012-11-20 18:19:38 763

原创 UVa 458 - The Decoder

题目:输出加密串的原串。分析:简单题、字符串。简单的加密,加密原则为加一个定值。#include #include #include char string[10005];int main(){ while ( scanf("%s",&string) != EOF ) { int len = strlen(string); for ( int i = 0 ; i <

2012-11-20 18:16:24 1587

原创 UVa 10783 - Odd Sum

题目:求给定区间内的奇数之和。分析:简单题。1+3+...+2k-1 = k^2。#include #include #include int main(){ int T,a,b; while ( scanf("%d",&T) != EOF ) for ( int t = 1 ; t <= T ; ++ t ) { scanf("%d%d",&a,&b); if

2012-11-20 15:01:33 857

原创 UVa 562 - Dividing coins

题目:给定m个硬币分成两组,求两组和的最小差值。分析:dp、背包。经典01背包模型,把硬币看成体积和价值相同的物品即可,利用背包求出总和一半的价值的容量能取得的最大价值,然后sum-2*f[sum/2]即为结果。#include #include #include int coin[ 105 ];int f[ 50005 ];int main(){ int n,m; w

2012-11-20 14:39:28 736

原创 UVa 160 - Factors and Factorials

题目:求出n!的所有素数因子的个数。分析:简单题、数论、打表。利用筛法先打素数表,然后一次统计即可。注意:输出格式有点纠结。#include #include #include int prime[ 105 ];int table[ 105 ];int ouput[ 105 ];int main(){ //计算素数、筛法打表 memset( table, 0 ,

2012-11-20 14:34:22 2090

原创 UVa 336 - A Node Too Far

题目:统计从某一点出发,走k步走不到的节点个数。分析:最短路、bfs、队列。利用bfs扩展的节点就是按照步长的递增序扩展。注意:数组开大会TLE、开小会RE。#include #include #include typedef struct lnode{ int point; lnode *next;}lnode;lnode Node[ 10000 ];ln

2012-11-20 02:36:18 1290 8

原创 UVa 113 - Power of Cryptography

题目:求已知k的n次方p和n,求k。分析:模拟、二分。模拟大数乘法和比较,利用二分寻找k。如果n很大可利用快速幂。注意:cstring和string.h中没有strrev函数、数据要用LL防止溢出。#include #include #include using namespace std;typedef long long LL;LL p[ 205 ];LL

2012-11-18 16:24:46 1273

原创 UVa 108 - Maximum Sum

题目:最大子矩阵和。分析:dp、最大字段和。二维的最大字段和。将问题转化为一维即可,即从第i列到第j列的最大字段和。所以预先对每行的第i到第j列求和,求每行的第i列到第j列的最大字段和。然后找到max[i][j]中最大的即为答案。时间复杂度O(N^3)、暴力O(N^4)。注意:暴力枚举会TLE。#include #include #include int dat[101][10

2012-11-18 15:04:42 1707

原创 nyist 600 - 花儿朵朵

题目:给定很多花的开花时间段,询问某一时间点有多少朵花儿开放。分析:线段树、离散化。利通每朵花的开花时间段的端点值将时间轴分割成区间段,则操作以每个区间段为整体进行。分割又两种方案:1.端点各成一段,端点间各成一段;2.建立左闭右开的区间,每个区间从上一个顶点开始、到下一个顶点之前结束(开区间)。本题采用方案2,方案一需要生成4倍花儿的数量,而方案2只需要2倍花儿的数量,空间复杂度会降低一倍。

2012-11-18 12:01:26 883

原创 UVa 136 - Ugly Numbers

题目:求由1、2、3和5相乘组成的数字的第1500个。分析:简单题。新的元素一定由原有元素和因子乘积得出。对于每个因子设置一根指向已求得序列的指针。每次取指针对应元素和因子乘积最小的,对应指针后移,重复跳过。时间复杂度为 O(集合大小*序列长度)。#include #include #include int d[ 1505 ];int main(){ int p2 =

2012-11-18 02:55:51 2753

原创 UVa 11402 - Ahoy, Pirates!

题目:给定一个01串,对串的某些区间进行:变0、变1、取反和查询操作。分析:线段树、离散化。经典的线段染色的变形。区间大小1000000,查询操作1000,如果直接建立1000000的区间的线段树,在上面操作会TLE。因为查询只有1000个,那么利用查询的端点将区间划分成最多4001段(每个端点各是一段、相邻端点间的部分各是一段)。对于所有操作,每段都可以看做一个整体。因此,通过离散化可以建立

2012-11-18 02:05:31 1891

原创 UVa 100 - The 3n + 1 problem

题目:给定递归方程,求某区间中的数字的最多迭代次数。分析:简单题、打表。首先可以求出(0,1000000)所有数字的最多迭代次数为525,所以直接打表求出所有结果。之后,每次读入数据直接查询输出即可,貌似不打表的更快。注意:输入数据的两个数字大小关系不定。#include #include #include int S[ 1000000 ];int f( long lo

2012-11-16 02:57:24 860

原创 UVa 102 - Ecological Bin Packing

题目:三种灯放在三个箱子里,求最少的移动灯的数量,使得每个箱子中只有同一种灯。分析:简单题、暴力。枚举所有情况,求出最小值即可。#include #include #include char type[6][4] = { "BCG","BGC","CBG", "CGB","GBC","GCB"};int table[6][9] = { 0,1,1, 1,1,0, 1,

2012-11-16 02:27:36 2399

原创 UVa 11297 - Census

题目:给定一个矩形的数组,在不断更新的过程中查询最值。分析:线段树。利用矩形的左上和右下2个顶点代表对应的矩形,建立矩形树。把每个矩形分成四个小矩形。设x3=(x1+x2)/2;y3=(y1+y2)/2,则矩形{(x1,y1),(x2,y2)}的四个孩子分别为{(x1,y1),(x3,y3)},{(x1,y3+1),(x3,y2)},{(x3+1,y1),(x2,y3)},{(x3+1,y3+

2012-11-15 23:12:57 1550

原创 UVa 11235 - Frequent values

题目:查询某非递减序列,某些区间中的众数出现的个数。分析:线段树、离散化。把相同的数字看成一个节点,建立不等分区间树。区间树的节点储存:区间的端点和此区间中的众数的个数。注意:离散化后并不经过映射建立等分线段树,而是利用原序列中的重复元素的端点建立区间树。#include #include #include #include using namespace std;i

2012-11-15 02:01:20 1472

原创 UVa 11503 - Virtual Friends

题目:求并查集元素的个数。分析:哈希表、并查集。利用hash表建立名字和对应数值的关系。利用一个数组记录集合中元素个数,每次合并,把元素个数加到根上即可。注意:如果查询在同一集合,也要输出 。#include #include #include #include #include using namespace std;//union_set__begein

2012-11-14 19:40:28 965

原创 UVa 11635 - Hotel booking

题目:求从起点到终点住过的hotel最少次数。分析:最短路、优先队列。利用spfa和优先队列求解。如果不用优先队列,则有n*h*t种状态,定会TLE,因此利用优先队列并利用优先队列的性质加以优化。优先队列元素的权值为二元组分别代表住过的Hotel数和从Hotel或起点出发后走到当前节点所有的时间。其中hotel的优先级高,所以程序是按照hotel递增的顺序运行的,和bfs时扫描的节点是相邻层的

2012-11-14 14:27:20 1182

SOFA: A Multi-Model Framework for Interactive Physical Simulation

HAL is a multi-disciplinary open access archive for the deposit and dissemination of scientific research documents, whether they are published or not. The documents may come from teaching and research institutions in France or abroad, or from public or private research centers.

2018-06-24

空空如也

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

TA关注的人

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