![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM
徐小武
努力向上
展开
-
三种寻找最长递增(减)子序列的方法【LIS】
最近做动态规划的题目时候做到了一个要用到最长递减子序列的题目,就查了一下关于求LIS的三种方法,在这里总结一下。问题:如给一个数组data[]={1,2,5,3,7,6,9},求其递增子序列长度,容易看出递增子序列为{1,2,3,6,9}长度为5第一种:最长公共子序列(LCS)法这种方法相对来说比较省事儿会LCS就可以直接用,不过这种方法有一个弊端只能找出最长递增等子序列,不止是递增相等的序列也会给原创 2017-04-20 22:15:14 · 1472 阅读 · 0 评论 -
UVa1584-Circular Sequence
UVa1584-Circular Sequence思路:数组不长还是暴力,先找出最小的字符,再一这个字符为头找出所有字符串中字典序最小的。代码:#include <bits/stdc++.h>using namespace std;int main(){ int n; string s; cin>>n; while(n--) { string原创 2017-08-03 23:33:31 · 238 阅读 · 0 评论 -
UVa1583-Digit Generator
UVa1583-Digit Generator思路:打表法,因为每次重新算很费时间,所以预处理一下,从1开始算把算出来的n放到以n为下标的数组中,这样计算的复杂度就是线性的。代码:#include <bits/stdc++.h>#define MAX 100005using namespace std;int a[MAX];int suan(int n){ int ans=n;原创 2017-08-03 23:33:07 · 238 阅读 · 0 评论 -
UVa1225-Digit Counting
UVa1225-Digit Counting思路:数据小直接暴力算也不会超时,也可以在纸上找规律用公式算这个最快代码:#include <iostream>using namespace std;int main(){ int n,m; cin>>n; while(n--) { int a[10]={0}; cin>>m;原创 2017-08-03 23:32:40 · 242 阅读 · 0 评论 -
UVa455-Periodic Strings
UVa455-Periodic Strings思路:因为字符串长度很短,所以可以暴力。从长度1开始把长度可以整除的往后滑动比较,找到第一个符合条件的输出代码:#include <bits/stdc++.h>using namespace std;int judeg(string &s,int n){ int l=s.size(); for(int i=n;i<=l-n;i+=n)原创 2017-08-03 23:32:06 · 552 阅读 · 0 评论 -
UVa401-Palindromes
UVa401-Palindromes思路:判断是否是回文和镜像,同样用字符串常量判断镜像可以好写很多。代码:#include <bits/stdc++.h>using namespace std;char mirrored(char ch){ char s[]="A 3 HIL JM O 2TUVWXY5"; char s2[]=" 1SE Z 8 "; if原创 2017-08-03 23:04:52 · 282 阅读 · 0 评论 -
UVa10082-WERTYU
UVa10082-WERTYU思路:这个题目又学会一招用字符串常量,本来要是我写就是老长的一堆if了,看了书学会了这个节省时间的技能代码:#include <bits/stdc++.h>using namespace std;string s="`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";int main(){ char ch;原创 2017-08-03 23:01:42 · 260 阅读 · 0 评论 -
UVa272-TEX Quotes
UVa272-TEX Quotes思路:水题,碰到双引号分奇偶输出新的引号,其他符号原样代码:#include <bits/stdc++.h>using namespace std;int main(){ char ch; int k=1; while(~scanf("%c",&ch)) { if(ch=='"') {原创 2017-08-03 22:53:23 · 445 阅读 · 0 评论 -
PAT乙级题解合集
这么就没练了来练练手,听说乙级都是水题暑假开始正式连前就先把乙级刷完吧,免得开始训练的时候手生,第一步计划是刷完乙级,然后开始水CF 题目在牛客网上刷的据说牛客上的数据比PAT官网要难点儿原创 2017-07-01 22:41:50 · 3688 阅读 · 0 评论 -
UVa489-Hangman Judge
UVa489-Hangman Judge思路:首先将答案串中的字母标记并计数不同字母个数K,然后遍历回答的串,如果标记过K–并取消标记,否则错误次数D++; K==0||D>6时退出,判断输赢。代码:#include <bits/stdc++.h>using namespace std;int main(){ int n,i; char s[101],me[101]; w原创 2017-08-07 18:31:30 · 309 阅读 · 0 评论 -
UVa1339-Ancient Cipher
UVa1339-Ancient Cipher思路:刚开始以为可以多个字符映射一个,用map来表示映射关系WA了两发,后来发现虽然每个字母之间映射没有关联(B映射后三个字母,A映射后后两个字母),但是映射关系还是要一一对应不能出现一对多的情况。然后改为统计每个字符的数量,然后比较两个串中的数量是否相同。代码:#include <bits/stdc++.h>using namespace std;int原创 2017-08-07 17:32:26 · 436 阅读 · 1 评论 -
UVa11809-Floating-Point Numbers
UVa11809-Floating-Point Numbers思路:看到题目我是懵逼的,先是艰难的理解了double类型的储存方式之后,刚开始准备用直接枚举的方法来算因为是分为阶码和位数来存要求找全为1的这样M最多有十个,E最多有30个这个数就是∑Mi=12−i⋅2E\sum_{i=1}^{M}2^{-i}\cdot 2^{E} 因为E最大为2302^{30} 所以没法儿存,后来看了别人的方法发现只原创 2017-08-07 16:10:11 · 403 阅读 · 0 评论 -
UVa1586-Molar Mass
UVa1586-Molar Mass思路:计算相对分子质量,因为只有四个元素且没有括号嵌套,就比较好写。但是代码写的还是丑,打了补丁代码:#include <bits/stdc++.h>using namespace std;int main(){ map<char,double>mp; mp['C']=12.01; mp['H']=1.008; mp['O']=1原创 2017-08-03 23:34:25 · 289 阅读 · 0 评论 -
UVa213-Message Decoding
UVa213-Message Decoding思路:紫书上的题目刚开始没有把各个功能独立开来能想到的例子都过了但是提交就RE,卡了巨长时间最后无奈按照书上思路把各个功能独立出来,一边过。无奈代码:#include <bits/stdc++.h>using namespace std;char ve[8][1<<9+1];char getcha(){ int ch; while(原创 2017-08-18 15:02:55 · 434 阅读 · 0 评论 -
UVa1588-Kickdown
UVa1588-Kickdown思路:这个题目的思路很好想到就是分别将两个字符串滑动比较他们重叠的每一位,如果有一位都是2则不行,如果这个重叠状态合法,就将这个状态的长度与当前最小值比较取小的那个。刚开始想怎么在一个循环里面把两边都给算上卡了很久发现很难搞,最后发现还是用两个循环分别比较好弄的多。代码:#include <bits/stdc++.h>using namespace std;stri原创 2017-08-07 15:36:55 · 386 阅读 · 0 评论 -
UVa1587-Box
UVa1587-Box思路:判断条件略多,要想能拼成长方体六个面要满足一下几点儿六个面中要有相同的三组对立面假设面ABC的边分别是X,Y(X<=Y),则三组对立面满足 A.x==B.xA.y==C.yB.y==C.x这样就是可以拼成盒子的条件,处理一下数据排序,if比较即可代码:#include <bits/stdc++.h>using namespace std;pair<int,i原创 2017-08-07 00:27:01 · 468 阅读 · 0 评论 -
UVa10340-All in All
UVa10340-All in All思路:刚开始看到以为是LCS的模版题直接套上模版就交了果断T,二次读题后发现因为是原串在加密串按照顺序出现过就行,所以暴力遍历对比一遍就找出来了。代码:#include <bits/stdc++.h>using namespace std;#define N 1000005char s[N],s2[N];int main(){ while(~sc原创 2017-08-06 23:32:00 · 265 阅读 · 0 评论 -
UVa202-Repeating Decimals
UVa202-Repeating Decimals思路:刚开始这个题目无从下手,后来看了别人的思路后恍然大悟,模拟手工运算除法,把每次取余的数存下来,如果这个数第二次出现那就是开始循环了,这个思路有了以后就是细心的问题了。代码:#include <bits/stdc++.h>using namespace std;int main(){ int a,b,num[3005],i,j;原创 2017-08-06 22:56:36 · 338 阅读 · 0 评论 -
UVa1368-DNA Consensus String
UVa1368-DNA Consensus String 思路:贪心的做法,因为要求与所有字符串的Hamming最低,所以最终串的每一位就是所有最多的那个,这样可以保证每一位不同的都是最少的。因为还要求字典序最小,所以相同时按照字典序输出,也就是按照ACGT的顺序判断就好了。代码:#include <bits/stdc++.h>using namespace std;char dna[55][10原创 2017-08-05 22:51:04 · 265 阅读 · 0 评论 -
UVa232-Crossword Answers
UVa232-Crossword Answers思路:题意是说有一个r*c的表里面有带字母的白块和黑块,有两种起始块儿横向起始块是左边为黑块或者没有东西,纵起始块是上面为黑块或没有东西,一行一行的将起始块从1开始编号,然后分别输出横纵起始块的编号的他们代表的单词,他们代表的单词就是从这个起始块开始找到边界或者找到黑块为止所有字母(横向往右找,纵向往下找)。没什么坑点儿,注意一下两组数据之间有一个空行原创 2017-08-05 22:18:39 · 346 阅读 · 0 评论 -
UVa227-Puzzle
UVa227-Puzzle思路:题意是有个5x5的板子上面有一个是空的,用空格表示,四种操作分别是ABRL,分别代表把空格上下右左的字母移动到空格处,然后给出一个初始状态,还有一系列操作输出最终状态,如果存在非法操作输出This puzzle has no final configuration.,非法操作就是越界的操作(比如空格已经在最右边了还要执行R就非法)。 这种模拟题一直都是最不愿意做的,原创 2017-08-05 19:36:17 · 269 阅读 · 0 评论 -
UVa340-Master-Mind Hints
Master-Mind Hints 思路:原题英文巨长,题意大概就是先给你正确的系列,然后再给你一系列序列如果某个元素位置和值都正确A++,值正确位置不正确B++,最后输出(A,B)。A的数量很好找直接比较,问题是B不好找,要判断是否在原序列出现过,还要判断是不是多了等等。后来看了刘如佳书上的写法,比较两个序列中每个数字出现较少的次数就是对B的贡献(假设正确序列X,猜测序列Y,X中有3个3,Y有2个原创 2017-08-05 12:06:58 · 466 阅读 · 1 评论 -
算法竞赛入门经典(第二版)紫书-题目集合【例题+习题】
写在前面还是感觉自己以前一直都是野路子,一直没有系统的照着一本书练完过,现在队友都在学校打多校联赛,我还回不去就先照着这个来,试试效果完善一下自己的技能树。也方便给后人铺路 PS:合集还在不停更新中题解用外链放出来方便查找,不再写到一个博客里了,上次乙级的70题都在一篇,太难找还不方便。第三章 题号 题目 知识点 例1 UVa272 Tex Quotes 水题,字符串 例原创 2017-08-03 22:52:47 · 4870 阅读 · 0 评论 -
UVa512-Spreadsheet Tracking
UVa512-Spreadsheet Tracking思路:因为要跟踪单元格而且要查询多次如果同时跟踪所有单元格的改变会很麻烦,所以我们只用把所有的操作给保存下来,然后每次跟踪一个单元格,查询一次就按照顺序再操作一次。另外还要注意的是因为删除和插入的顺序是没有影响的所以同一个操作的所有列或行是同时被改变的,所以要先记录再更改。代码:#include <bits/stdc++.h>using name原创 2017-08-18 16:38:53 · 409 阅读 · 0 评论 -
UVa133-The Dole Queue
UVa133-The Dole Queue思路:两边同时模拟代码:#include <bits/stdc++.h>using namespace std;int main(){ int n,m,k,ren[30]={0}; while(~scanf("%d %d %d",&n,&k,&m),k+m+n) { int count_k=0,count_m=0,f原创 2017-08-18 15:07:42 · 362 阅读 · 0 评论 -
Codeforces #423-Div. 2-B. Black Square
B. Black Squaretime limit per test1 second memory limit per test256 megabytes题目:Polycarp has a checkered sheet of paper of size n × m. Polycarp painted some of cells with black, the others remained wh原创 2017-07-12 02:45:03 · 410 阅读 · 0 评论 -
Codeforces #423-Div. 2-C. String Reconstruction
C. String Reconstructiontime limit per test2 seconds memory limit per test256 megabytes题目Ivan had string s consisting of small English letters. However, his friend Julia decided to make fun of him and原创 2017-07-12 03:00:45 · 437 阅读 · 0 评论 -
Codeforces #423-Div. 2—A. Restaurant Tables
题目:A. Restaurant Tablestime limit per test1 second memory limit per test256 megabytes描述:In a small restaurant there are a tables for one person and b tables for two persons.It it known that n groups o原创 2017-07-12 02:37:26 · 342 阅读 · 0 评论 -
NYOJ-开心的小明【动态规划|01背包】
开心的小明时间限制:1000 ms | 内存限制:65535 KB 难度:4描述小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N 元钱就行”。今天一早小明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的N 元。于是,他把每件物品规定了一个重要度,分为5 等:用原创 2017-04-25 08:05:46 · 371 阅读 · 0 评论 -
NYOJ-The Triangle【数塔问题】
The Triangle时间限制:1000 ms | 内存限制:65535 KB难度:4描述73 88 1 02 7 4 44 5 2 6 5(Figure 1)Figure 1 shows a number triangle. Write a program that calculates the highest sum of原创 2017-04-25 07:32:18 · 352 阅读 · 0 评论 -
NYOJ—skiing【记忆化搜索】
skiing时间限制:3000 ms | 内存限制:65535 KB 难度:5描述Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子 1 2 3 4 516 17 18 19原创 2017-04-24 21:52:41 · 460 阅读 · 0 评论 -
NYOJ-苹果【01背包|模版题】
苹果时间限制:3000 ms | 内存限制:65535 KB 难度:3描述ctest有n个苹果,要将它放入容量为v的背包。给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱最大值。输入有多组测试数据,每组测试数据第一行为2个正整数,分别代表苹果的个数n和背包的容量v,n、v同时为0时结束测试,此时不输出。接下来的n行,每行2个正整数,用空格隔开,分别代表苹果的大小c和价钱w。所有输入数字原创 2017-04-24 10:24:26 · 257 阅读 · 0 评论 -
STL中的二分查找,lower_bound();与upper_bound();
今天敲代码的时候又发现一个好用函数,虽然说二分查找不难写,但是既然STL中已经提供了为啥不用呢 ,防止忘掉赶紧mark一下 头文件不用说既然是一个算法就是在#include <algorlthm> 里面 lower_bound();与upper_bound(); 的参数列表相同第一个需要查询序列的头指针,尾指针,插入元素 两个函数不同的是lower_bound(); 返回的是大于等于查询元素的原创 2017-04-21 16:13:18 · 341 阅读 · 0 评论 -
NYOJ-导弹发射-河南省第九届省赛D题【LIS】
导弹发射时间限制:1000 ms | 内存限制:65535 KB 难度:4描述Alpha 机构研发出一种新型智能导弹,它能够在雷达检测到的区域内,选择一条前进的路径, 击破路径上所有的目标物。 雷达位于(0,0)处,它能够检测到两条射线之间的区域(不妨设在第一象限)。 导弹一开始置放在(0,0)处,它可以在雷达能检测到的区域内先选择一个目标物击破,然后 再继续前进,选择另一个目标物击破。注意,原创 2017-05-03 16:58:18 · 509 阅读 · 0 评论 -
hdu-2159-FATE【二维费用背包】
FATETime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 13656 Accepted Submission(s): 6459Problem Description最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停原创 2017-05-03 12:52:01 · 306 阅读 · 0 评论 -
NYOJ—图像有用区域【广搜BFS】
图像有用区域时间限制:3000 ms | 内存限制:65535 KB 难度:4描述“ACKing”同学以前做一个图像处理的项目时,遇到了一个问题,他需要摘取出图片中某个黑色线圏成的区域以内的图片,现在请你来帮助他完成第一步,把黑色线圏外的区域全部变为黑色。已知黑线各处不会出现交叉(如图2),并且,除了黑线上的点外,图像中没有纯黑色(即像素为0的点)。输入第一行输入测试数据的组数N(0输出以矩阵原创 2017-04-12 08:36:27 · 247 阅读 · 0 评论 -
hdu-2639-Bone Collector II【第K大背包】
Bone Collector IITime Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4730 Accepted Submission(s): 2462Problem DescriptionThe title of this probl原创 2017-05-03 10:26:13 · 283 阅读 · 0 评论 -
NYOJ—动物统计【字典树】
动物统计加强版时间限制:3000 ms | 内存限制:150000 KB 难度:4 @(ACM)[字典树]描述在美丽大兴安岭原始森林中存在数量繁多的物种,在勘察员带来的各种动物资料中有未统计数量的原始动物的名单。科学家想判断这片森林中哪种动物的数量最多,但是由于数据太过庞大,科学家终于忍受不了,想请聪明如你的ACMer来帮忙。输入第一行输入动物名字的数量N(1<= N <= 4000000)原创 2017-04-18 16:03:07 · 589 阅读 · 0 评论 -
三种背包模版,01背包,完全背包,多重背包
#include <iostream>#include <cstdio>#include <cstring>#define max(a,b) (a>b?a:b)using namespace std;int f[100005],v,c[20],a[20];void ZeroOnePack(int cost,int weight){ for(int i=v;i>=cost;i--原创 2017-04-28 16:22:38 · 347 阅读 · 0 评论 -
NYOJ-传纸条(一)、探寻宝藏【双路(线)DP】
两道题目的意思是一样的,代码也仅仅是改了一句所以就放在一块儿说了传纸条(一)时间限制:2000 ms | 内存限制:65535 KB 难度:5描述小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方原创 2017-04-25 19:45:43 · 620 阅读 · 0 评论