- 博客(57)
- 问答 (2)
- 收藏
- 关注
原创 lightoj1066【BFS】
题意:就是按照A->B->C->D....去拿,求步数;思路:有一个注意点:如果碰到合法字母吃掉,那么下一步就可以吃了;有一种方法,就是我BFS最多26次,每次走个A->B,一步一步走;还有就是搞一个BFS,然后中间初始化一下就好了。这道题目深刻地理解BFS就是起点到终点的一个过程~(●'◡'●)也像走一步再走一步#include using namespace st
2016-11-30 23:27:41 374
原创 lightoj1064 【DP求方案】
题意:n个相同的骰子,问你掷出>=x点数的可能性;思路:dp[i][j]代表前 i 个骰子掷出 j 点数的方案数;然后卧槽,一开始想的是拆分搞。。。。。。其实这种就是个简单DP啊///#include using namespace std;typedef long long LL;typedef unsigned long long ULL;typed
2016-11-30 21:59:41 405
原创 lightoj1063【求割点】
题意不懂。。只知道求割点。贴一发我bin模板先。#include using namespace std;typedef long long LL;typedef unsigned long long ULL;typedef pairPII;const double eps=1e-5;const double pi=acos(-1.0);const int mod=1e9
2016-11-30 16:03:26 358
原创 lightoj 1074【spfa判负环】
题意:给你一幅图,dis(u->v)的权值就是(w[v]-w[u])*(w[v]-w[u])*(w[v]-w[u]),所以有可能是负的,给你n个询问,给出最短路,长度思路:spfa判个负环就好了;但是。。。。没有考虑与负环相连的所有都是会越来越来,所以每次有负环,要搜一下,把整块拿掉100611 12 9 8 7 1065 61 22 53 15
2016-11-29 22:48:03 406
原创 CodeForces 382C【模拟】
活生生打成了大模拟。。。#include using namespace std;typedef long long LL;typedef unsigned long long ULL;typedef pairPII;const double eps=1e-5;const double pi=acos(-1.0);//const int mod=1e9+7;const int
2016-11-29 21:26:44 274
原创 lightoj1072【简单数学】
题意:一个大圆的半径,里面有相邻的n个小圆,求这些小圆的半径;思路:x=sin(2π/n);r=x*R/(1+x);#include using namespace std;typedef long long LL;typedef unsigned long long ULL;typedef pairPII;const double eps=1e-5;con
2016-11-29 15:43:53 323
原创 lightoj1060【康托逆展开】
可以先看些资料:http://blog.csdn.net/keyboarderqq/article/details/53388936参考谷巨巨:http://blog.csdn.net/azx736420641/article/details/50982142#include using namespace std;typedef long long LL;typedef unsig
2016-11-29 09:37:06 413
转载 康拓展开
出处:点我打开康托展开是一种特殊的哈希函数。如我想知道321是{1,2,3}中第几个大的数可以这样考虑: 第一位是3,当第一位的数小于3时,那排列数小于321 如 123、 213 ,小于3的数有1、2 。所以有2*2!个。再看小于第二位2的:小于2的数只有一个就是1 ,所以有1*1!=1 所以小于321的{1,2,3}排列数有2*2!+1*1!=5个 。所以321是第6个大的数
2016-11-29 09:20:50 298
原创 Codeforces 61B【怪在读题】
搞不懂为什么DFS的写法崩了,然后乱暴力,因为题意不是很懂。。。主要还是读题吧(很烦#include using namespace std;typedef long long LL;typedef unsigned long long ULL;typedef pairPII;const double eps=1e-5;const double pi=acos(-1.0);/
2016-11-28 21:33:49 400
原创 51nod 1449 砝码称重【天平/进制】
题意:给你w,n,问你在w^0,w^1,w^2...各种一个,问你能不能用这些砝码和重量为m的东西放在天平上使得天平平衡;思路:这个很容易联想到进制:如果把m放在是一边的话,其实对于砝码就是纯粹的相加,能不能被表示成这样一个进制,每个位上就是是0或1那么如果两边都要放呢?所以就是说我要怎么利用m和已拥有的,构造一个仅有01的进制数为什么这么说呢?因为是左边右边等价啊;
2016-11-28 16:44:57 557
原创 CodeForces722C Destroying Array【瞎搞】
题意:先给你一个序列,然后给你n个1-n的一个数,让你求前i个元素销毁的时候,区间字段和区间最大;思路:离线处理,维护新区间首尾位置的起点和终点,倒着处理;#include using namespace std;typedef long long LL;typedef unsigned long long ULL;typedef pairPII;const do
2016-11-26 23:00:46 263
原创 lightoj 1076 【二分找满足条件的最左】
#include using namespace std;typedef long long LL;typedef unsigned long long ULL;typedef pairPII;const double eps=1e-5;const double pi=acos(-1.0);const int INF=0x3f3f3f3f;const int N=1e3+10;
2016-11-25 15:35:20 286
原创 Lightoj 1067【逆元模板(求C(N,M))】
#include using namespace std;typedef long long LL;typedef unsigned long long ULL;typedef pairPII;const double eps=1e-5;const double pi=acos(-1.0);//const int mod=1e9+7;const int INF=0x3f3f3f3f
2016-11-25 14:14:54 507
原创 5-4 公路村村通 (30分)【简单的最小生成树】
5-4 公路村村通 (30分)现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。输入格式:输入数据包括城镇数目正整数NN(\le 1000≤1000)和候选道路数目MM(\le 3N≤3N);随后的MM行对应MM条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建
2016-11-24 22:54:37 1367
原创 5-5 城市间紧急救援 (25分)【最短路spfa】
5-5 城市间紧急救援 (25分)作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。输入格式:输入第一行给出4个正整数NN、M
2016-11-24 22:35:08 1139
原创 lightoj 1078【同余定理】
题意:给你一个n和一个数 digit ,问你最少需要多少个 digit 使得整除于n;思路:同余定理(a+b)%n=(a%n+b%n)%n;(m%n+m%n*10+m%n*100+m%n*1000......)%n==0;temp=m%n;temp=(temp*10+m)%n=(10*m%n+m%n)%n;temp=(temp*10+m)%n=(10*10*m%n+10
2016-11-23 22:11:41 456
原创 5-2 Windows消息队列 (25分)
5-2 Windows消息队列 (25分)消息队列是Windows系统的基础。对于每个进程,系统维护一个消息队列。如果在进程中有特定事件发生,如点击鼠标、文字改变等,系统将把这个消息加到队列当中。同时,如果队列不是空的,这一进程循环地从队列中按照优先级获取消息。请注意优先级值低意味着优先级高。请编辑程序模拟消息队列,将消息加到队列中以及从队列中获取消息。输入格式:输
2016-11-23 09:18:58 1283
原创 Lightoj1080 【线段树】
题意:给你一个0/1的数组,然后给你n段区间,说这个区间里要反转一次,然后给你Q个询问,问你这个位置是什么;思路:我们线段树维护一下就好了额;其实反转的话,还是算次数是不是,奇偶嘛;#include using namespace std;typedef long long LL;const int N=1e5+10;struct SegT{ int sum;
2016-11-23 01:58:38 379
原创 NITACMOJ144稳定串
点我》》题目链接稳定串Time Limit: 1000msMemory Limit: 65536KB64-bit integer IO format: %lld Java class name: MainPrev Submit Status Statistics NextType: None
2016-11-23 00:58:47 921
原创 萌新循环队列学习笔记
循环队列:队列最简单的表示方法就是数组啊;用数组表示队列,那么普通的方法就是简单的搞两个下标代表队列头,队列尾,然后进队,出队,但是随着入队,出队操作的进行,会使整个队列整体向后移动,队尾指针已经移到了最后,再有元素入队就会溢出,而事实上此时队中并未真的“满员”,这种现象称为“假溢出”。为了解决队尾溢出而实际上数组仍然有空余空间的问题,一般在队列的顺序存储结构中采用循环队列的方式:
2016-11-22 16:40:28 446
原创 5-7 是否同一棵二叉搜索树 (25分)
5-7 是否同一棵二叉搜索树 (25分)给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式:输入包含若干组测试数据。每组数据的第1行给
2016-11-22 12:52:59 3486
原创 5-6 笛卡尔树 (25分)
5-6 笛卡尔树 (25分)笛卡尔树是一种特殊的二叉树,其结点包含两个关键字K1和K2。首先笛卡尔树是关于K1的二叉搜索树,即结点左子树的所有K1值都比该结点的K1值小,右子树则大。其次所有结点的K2关键字满足优先队列(不妨设为最小堆)的顺序要求,即该结点的K2值比其子树中所有结点的K2值小。给定一棵二叉树,请判断该树是否笛卡尔树。输入格式:输入首先给出正整数N(\
2016-11-22 00:56:03 1874 2
原创 5-4 搜索树判断 (25分)
5-4 搜索树判断 (25分)对于二叉搜索树,我们规定任一结点的左子树仅包含严格小于该结点的键值,而其右子树包含大于或等于该结点的键值。如果我们交换每个节点的左子树和右子树,得到的树叫做镜像二叉搜索树。现在我们给出一个整数键值序列,请编写程序判断该序列是否为某棵二叉搜索树或某镜像二叉搜索树的前序遍历序列,如果是,则输出对应二叉树的后序遍历序列。输入格式:输入
2016-11-21 23:33:42 1602
原创 Lightoj1081【500棵线段树维护】
#include using namespace std;typedef long long LL;const int N=5e2+10;const int INF=0x3f3f3f3f;struct SegT{ int left; int right; int w;};SegT q[N][N*4];int dp[N];int a[N][N];v
2016-11-21 21:04:34 375
原创 Lightoj1083【单调栈】
#include #include #include #include #include using namespace std;typedef long long LL;const int N=5e4+10;struct asd{ LL pre; LL next; LL num;};int n;LL ww[N];int main(){
2016-11-21 20:12:24 444
原创 Lightoj 1082【RMQ】
这里很low地写了个线段树。。。#include using namespace std;typedef long long LL;const int N=1e5+10;struct SegT{ int left; int right; int w;};SegT q[N*4];void Build(int num,int L,int R){ q
2016-11-21 19:05:00 445
原创 hrbust1444 逃脱 【BFS】
Description 这是mengxiang000和Tabris来到幼儿园的第四天,幼儿园老师在值班的时候突然发现幼儿园某处发生火灾,而且火势蔓延极快,老师在第一时间就发出了警报,位于幼儿园某处的mengxiang000和Tabris听到了火灾警报声的同时拔腿就跑,不知道两人是否能够逃脱险境?幼儿园可以看成是一个N*M的图,在图中一共包含以下几种元素:“.”:表示这是一块空地,是可以
2016-11-21 01:26:25 594
原创 萌新学习笔记之哈夫曼树
哈夫曼树的定义:假设有n个权值{ w1,w2 , ... , wn},构造有n个叶结点的二叉树,每个叶结点的权值是n个权值之一,这样的二叉树可以构造很多棵,其中必有一棵是带权路径长度最小的,这棵二叉树就称为最优二叉树或哈夫曼树;typedef struct TreeNode* HuffmanTree;struct TreeNode{ int Weight; Huffm
2016-11-20 10:45:54 690
原创 lightoj 1085【离散化+树状数组】
题意:求所有的上升子序列种数;思路:我想先离散化一下,然后用树状数组维护一下。最终答案就是sum(n) ?卧槽,好像是;然后就过了。。#include using namespace std;typedef long long LL;const LL mod=1000000007;const int N=1e5+10;LL arr[N],n;LL c[N*4]
2016-11-20 00:54:44 435
原创 CodeForces 586D【BFS】
题意:s是这个人开始位置;连续相同大写字母是 Each of the k trains,相应的火车具有相应的字母;'.' 代表空;有个人在最左列,上面有连续字母代表的火车,火车从左边出去的话,会从右边继续进来,一开始是人先往右走一步,然后上下或者一步,然后火车往左移两步。n有100,代表长度,k代表火车的数量;思路:BFS;走完还要再走两个= =、妈个鸡啊。一开
2016-11-20 00:20:17 564
原创 lightoj 1089 【离散化+线段树】
题意:给你n个区间,然后给你m个i点问你这个点在几个所给定的区间里;思路:离散化+区间覆盖#include using namespace std;typedef long long LL;const int N=5e4+10;struct SegT{ int left,right; int val; int flag;};SegT q[N*1
2016-11-19 11:00:39 427
原创 lightoj 1088【树状数组+离散化】
题意:给你n个数,然后给你q个区间,然后问你这n个数有多少个在这个区间上;思路:树状数组搞搞,但是注意到数的范围很大,所以先离散化一下。初始化初始化!!!卧槽,wa的我好郁闷。。。#include using namespace std;typedef long long LL;const int N=2e5+10;int arr[N];int c[N*4];in
2016-11-18 20:32:12 441
原创 lightoj1087 【线段树】
题意:给你n个数,然后给你q个询问,有两种询问:a: 表示在右边插入一个数c:表示从左边拿出一个数,然后输出;思路:一开始在想,自己手上的黑科技:线段树和树状数组线段树上的操作:求区间最大,没说区间第几个啊;树状数组:搞一发前缀和,妈个鸡,树状数组还需要知道下标和位置;还有什么:数组,感觉黑科技没什么了;然后。。。线段树维护区间有多少个数,好像很
2016-11-18 19:39:43 473
原创 萌新笔记之堆(heap)
前言(萌新感想):以前用STL的queue啊stack啊priority_queue啊,一直很想懂原理,现在终于课上到了priority_queue,还有就是下周期中考,哈哈,所以写几篇blog总结一下。这里萌新讲下堆这个好东西;堆的定义:如果搞过ACM的童鞋应该会使用STL的priority_queue,堆就是STL的priority_queue。堆是一种特殊的队列,从堆
2016-11-18 15:47:15 393
原创 lightoj 1027【数学概率】
#include using namespace std;typedef long long LL;const int N=1e2+10;int main(){ int T,cas=1,n,x; scanf("%d",&T); while(T--) { scanf("%d",&n); int up=0; i
2016-11-17 22:41:14 499
原创 Lightoj1093 【线段树】
题意:给出n个数,然后对于D区间的数求一个最大差值思路:区间最大最小。。。我居然没想到线段树。。。#include using namespace std;typedef long long LL;const int N=1e5+10;struct SegT{ int left; int right; int mid; int tmin,t
2016-11-17 21:19:47 394
原创 Lightoj 1094 【DFS】
题意:给你一颗n-1条边的树,求某两点的最长路思路:随便找个根,然后我们从根往下搜,对于每个结点会出现多个子节点或者一个子节点或者没有结点,多个子节点的话,就以他为中间点,在子节点中找两条最长的,加起来比比;直接搜吧;哎好难讲啊,其实画个图就很容易了;(直接注释在代码里面吧。。#include using namespace std;typedef lo
2016-11-17 16:29:13 421
原创 Lightoj 1098【数学/玄学】
题意:对于每个数求除1和本身的约数和,然后求前n个数的所有这种约数的和;思路:首先可以知道对于约数考虑就好了,对于1-n的约数,n/2-1(减1是因为2不算啊)就是约数为2出现过的次数如果n不是很大,那么直接sum就好了;但是这里n很大,所以搞sqrt(n),对于>sqrt(n)的约数,也就是对于q=n/i,比如n=100,n/7=12,很明显[10,12]所有的数都可
2016-11-17 01:37:59 891
原创 lightoj 1096【矩阵快速幂(作为以后的模板)】
基础矩阵快速幂何必看题解#include using namespace std;/*0 1 2 3 4 5 6 70 0 0*/const int mod=10007;struct asd{ int num[4][4];};asd mul(asd a,asd b){ asd ans; memset(ans.num,0,sizeof(ans.n
2016-11-16 22:02:42 480
空空如也
解高次方程,除二分法
2016-01-22
C语言memset函数赋0问题
2015-11-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人