- 博客(16)
- 收藏
- 关注
原创 743div.2 book(拓扑排序+dp)
传送门题意要读完一本书,当你想读m章节时,必须先读m的若干前驱章节,读书的顺序每次都是从头到尾,没达到要求的章节只能跳过,请问最少要读几遍书才能将整本书的全部章节都读完。分析首先有节点之间的关系,至少可以用图去储存信息,然后又给了若干组每组数据都相当于节点之间的线性关系,然后就是每个节点的前驱都被遍历过了才能遍历此节点可以想到拓扑序列中父节点入度为零时入队列的操作,然后就是dp思想,当节点x的前驱节点y有比他大时,dp[x] = max(dp[x],dp[y]+1),因为后面的章节要再读一遍书才能读
2021-09-27 19:02:10
92
1
原创 Super Mario HDU 4417(线段树+离线)
传送门题面Mario is world-famous plumber. His “burly” figure and amazing jumping ability reminded in our memory. Now the poor princess is in trouble again and Mario needs to save his lover. We regard the road to the boss’s castle as a line (the length is n), o
2021-09-09 00:01:14
122
原创 线段树(模板)
单点修改+区间查询#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>using namespace std;const int N = 1e5+10;struct node{ int l,r,sum;}tree[N<<2];void pushup(int k){`在这里插入代码片` tree[k].sum = tree[k<&
2021-09-08 23:28:26
52
原创 2021-09-07
#include<iostream>#include<cstring>#include<algorithm>#include<string>using namespace std;const int N = 1e5;int a[N];int b[N];int main(){ int n; cin >> n; int len =0 ; for(int i=1;i<=n;i++) { cin >> a[
2021-09-07 22:28:02
62
原创 快速幂(模板)
#include<iostream>#include<cstring>#include<algorithm>using namespace std;int main(){ long long a,b,c,sum=1;//a底数,b指数,c模 cin >> a >> b >> c; while(b>0) { if(b&1) { sum = sum*a%c; } b >>
2021-07-16 16:34:58
45
原创 HDU - 2204
传送门Ignatius 喜欢收集蝴蝶标本和邮票,但是Eddy的爱好很特别,他对数字比较感兴趣,他曾经一度沉迷于素数,而现在他对于一些新的特殊数比较有兴趣。这些特殊数是这样的:这些数都能表示成M^K,M和K是正整数且K>1。正当他再度沉迷的时候,他发现不知道什么时候才能知道这样的数字的数量,因此他又求助于你这位聪明的程序员,请你帮他用程序解决这个问题。为了简化,问题是这样的:给你一个正整数N,确定在1到N之间有多少个可以表示成M^K(K>1)的数。Input本题有多组测试数据,每组包含
2021-06-17 20:17:27
117
原创 HDU - 1257
题目链接某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹.怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统.Input输入若干组数据.每组数据包括:导弹总个数(正整数,不超过1000),导弹依此飞来的高度(
2021-06-16 20:40:41
54
原创 51Nod - 1021
链接N堆石子摆成一条线。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价。计算将N堆石子合并成一堆的最小代价。例如: 1 2 3 4,有不少合并方法1 2 3 4 => 3 3 4(3) => 6 4(9) => 10(19)1 2 3 4 => 1 5 4(5) => 1 9(14) => 10(24)1 2 3 4 => 1 2 7(7) => 3 7(10) => 10(20)
2021-06-15 18:37:31
82
转载 HDU - 2063
链接RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了。可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做partner和她同坐。但是,每个女孩都有各自的想法,举个例子把,Rabbit只愿意和XHD或PQK做partner,Grass只愿意和linle或LL做partner,PrincessSnow愿意和水域浪子或伪酷儿做partner。考虑到经费问题,boss刘决定只让找到partner的人去坐过山车,其他的人,嘿嘿,就站在下面看着吧。聪明的A
2021-06-14 23:49:15
101
原创 [蓝桥杯][2013年第四届真题]大臣的旅费
链接题干很久以前,T王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。为节省经费,T国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同时,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的。J是T国重要大臣,他巡查于各大城市之间,体察民情。所以,从一个城市马不停蹄地到另一个城市成了J最常做的事情。他有一个钱袋,用于存放往来城市间的路费。聪明的J发现,如果不在某个城市停下来修整,在连续行进过程中
2021-03-21 11:50:19
89
转载 HDU-2544
题干在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗?Input输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1的路口是商店所在地,标号为N的路口是赛场所在地,M则表示在成都有几条路。N=M=0表示输入结束。接下来M行,每行包括3个整数A,B,C(1<=A
2021-03-21 10:47:34
61
原创 素数判定(一般写法)
bool JudgePrime(int digit){ if(digit==2 || digit==3) return true; else if(digit<=1 || digit%2==0) return false; else if(digit>3) { for(int i=3;i*i<=digit;i+=2) if(digit%i==0) return false; return true; }
2021-03-14 08:26:08
56
原创 背包问题_模板
01背包朴素写法 - 需要开一个二维数组f[i][j]用来储存“选法”,w[i]代表物品的价值,v[i]代表物品的体积,m表示背包的体积, n表示物品的总个数for(i=1;i<=n;i++) for(j=0;j<=m;j++) { f[i][j]=f[i][j-1]; if(j>=v[i])f[i][j]=max(f[i][j],f[i][j-v[i]]+w[i]); }printf("%d",f[n]][m]);一维优化版for(i=1;i<=n;
2021-03-07 19:35:59
56
原创 快排
模板void quick_sort(int q[],int l,int r){ if(l>=r)return ;//"="和“>="效果相同 int t,x=q[(l+r)/2],i=l-1,j=l+1; while(i<j) { do i++;while(q[i]<x); do j--,while(q[j]>x); if(i<j)t=q[i],q[i]=q[j],q[j]=t; } quick_sort(q,l,j),quick_sort(q
2020-12-22 17:58:06
59
原创 树状数组-
功能1.单点更新#区间查找#模板int lowbit(int x){ return x*-x;}int update(int x,int y) //更新#修改的函数{ while(x<=N) //N是元素个数 { //c[i]是树状数组 c[x]+=y; //y是要更新的值 x+=lowbit(x); }}int getsum(int x) //查询函数{ int ans =0; while(x>0) { ans+=c[x]; x-=lo
2020-12-01 12:53:23
83
原创 printf
#include<stdio.h>#include<math.h>int main(){ double xa,ya,xb,yb,m; scanf("%lf %lf\n%lf %lf",&xa,&ya,&xb,&yb); m = pow(fabs(xa-xb),2)+pow(fabs(ya-yb),2); // 无论亮点在坐标上如何分布,计算方法都相同 printf("%.3f",sqrt(m)); return 0;}
2020-11-26 22:37:29
55
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人