自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

梦幻的蔷薇色

迁移至新博客:hiyongheng.cn-------我也向往蔷薇色的生活啊,可我是灰色的。

  • 博客(48)
  • 资源 (8)
  • 收藏
  • 关注

原创 51nod 1163 最高的奖励

先建一个优先队列,小根堆,然后按照任务的时间升序排序,然后从头开始扫,如果当前的时间没有超过任务的最晚结束时间,就把任务扔到优先队列里,然后继续扫,当扫到某个任务,发现他的最晚结束时间已经过去了,就从优先队列里出来一个最小的,他俩比较,如果当前的任务获得的奖励更高,就把队列里的那个之前的任务替换掉。这样扫完,队列里的任务就是获得奖励最高的任务了。然后加和就好了。#include <bits/stdc

2017-07-31 21:49:58 234

原创 51nod 1267 4个数和为0

先把任意两个数的和打表出来,然后枚举两个数,然后再在那些和里面查找 0-n1-n2。查找到后,看一下和n1或者n2是否重复,如果不重复,才符合条件。还可能有好多两个数字的和是一样的,所以不要查找到比过就完了,还要往后看看数字是否一样。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN

2017-07-31 21:32:24 248

原创 51nod 1116 K进制下的大数

O(35*n),暴力跑一趟就过了。 就是个大数取模。。。 还可以O(n)过,过段时间还要看看O(n)的解法#include <bits/stdc++.h>using namespace std;const int MAXN = 1e5+10;int num[MAXN];int nlen;int maxn;//确定最小是几进制bool solve(int k){ int rema

2017-07-31 21:24:37 193

原创 51nod 1098 最小方差

排序之后,扫一遍即可,排序后,在这段序列中连续的一段序列的方差肯定比不连续的序列的方差小,因为连续的序列相对于平均值来说,波动的范围比较小。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN = 10010;LL num[MAXN];LL prefixSum[MAXN];int M,

2017-07-31 21:21:07 312

原创 51nod 1097 拼成最小的数

排序,两个串a,b,,如果ab < ba,则a在前,否则a在后#include <bits/stdc++.h>using namespace std;const int MAXN = 10010;string strs[MAXN];bool cmp(const string& a, const string& b){ return a+b < b+a;}int main(){

2017-07-31 10:07:57 265

原创 51nod 1068 Bash游戏 V3

写写画画就能找到规律,不过我是蒙对的 讨论说sg函数可以证明,看来有必要研究一下t = int(raw_input())for x in range(0,t): n = int(raw_input()) if n%3 == 0: print 'B' else: print 'A'

2017-07-31 10:06:12 200

原创 Codeforces Round #426 (Div. 2) C The Meaningless Game

假设选了五个数,分别是k1,k2,k3,k4,k5 a = k1*k2*k2*k3*k4*k4*k5 b = k1*k1*k2*k3*k3*k4*k5*k5 a*b=k1^3 * k2^3 * k3^3 * k4^3 *k5^3 a,b<=10^9,a*b<=10^18,a*b开三次根号就是10^6 在(1,10^6)内二分,找到mid^3 = a*b,并且a%mid=0,b%mid=0#

2017-07-31 09:47:44 155

原创 Codeforces Round #426 (Div. 2) B The Festive Evening

对于每种字符,第一次出现的位置为起点,最后一次出现的位置为终点,构成一条线段。每种字符一条线段,求线段重叠,最多有多少个线段重叠,然后和k比较。线段树区间更新,然后查询最值#include<bits/stdc++.h>using namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define mid (l+r)>>1c

2017-07-31 09:42:15 214

原创 Codeforces Round #426 (Div. 2) A The Useless Toy

打表喽#include <bits/stdc++.h>using namespace std;map<string,int> cmp,ccmp;int main(){ ios::sync_with_stdio(false); // cmp["^ >"] = 1; cmp["^ v"] = 2; cmp["^ <"] = 3; cmp["> v"]

2017-07-31 09:39:22 172

原创 51nod 1065 最小正子段和

求前缀和,然后升序排序。排序后相邻两个前缀和只差越小,比如prefixSum[i+1],假设他原来坐标是n,和prefixSum[i],假设他原来坐标是m,他俩差越小,则表明区间(m,n]之间的正整数和越小,前提是n>m。还有排序的时候如果有多个前缀和相等,则把下标大的放在前边,下标小的放后边。 比如输入数据: 4 0 4 1 -1 自己写一下就知道为啥那样排序了。#include

2017-07-31 09:03:24 240

原创 hdu 6055 Regular polygon

枚举两个点,然后计算出正方形两外两个点,然后查找有没有这两个点。 在此之前真不知道怎么根据两点算另外两点,几何都白学了#include <bits/stdc++.h>#define ll long longusing namespace std;struct Point{ int x,y;} p[555];set<pair<int,int>> sets;int solve(P

2017-07-30 19:22:40 252

原创 hdu 2586 How far away ?(lca-在线ST)

分别算出来俩点到根的距离,然后减去公共祖先到根的距离的二倍。初学lca,也忘了参考的谁的代码了#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;const int MAXN = 40010;const int MAXM = 25;int _pow[MAXM],

2017-07-30 19:15:01 365 1

原创 hdu 6047 Maximum Sequence

先把b升序排序,这样使用b的时候从小的开始用,这样选择范围大,可以确保开始的时候就能尽量的选到大的aj-j,这样后边得到的aj-j也是尽量的大的。 a数组是动态变化的,而且每次都要选出最大的aj-j,所以用优先队列来维护#include <bits/stdc++.h>using namespace std;const int MAXN = 250010;int b[MAXN*2];const

2017-07-30 19:04:32 248

原创 51nod 1534 棋子游戏

就看看波雷卡普能不能截住瓦西里的路。 如果xp<=xv&&yp<=yv,则波雷卡普一定能截住瓦西里,波雷卡普必胜,如果xp>xv&&yp>yv,则瓦西里必胜。然后剩下的情况,谁靠原点近谁就赢了。这个画画图,分析下他俩走的路就看出来了。如果波雷卡普更靠近原点,他一定能拦截住瓦西里,否则拦截不住。//坐标靠近原点的肯定获胜#include <bits/stdc++.h>using namespa

2017-07-30 00:33:45 260

原创 51nod 1418 放球游戏

分了一堆情况。。。。#include <bits/stdc++.h>using namespace std;//0 1 2 R G Bint record[3];char str[55];void add(char ch){ if(ch == 'R') ++record[0]; else if(ch == 'G') ++record[1];

2017-07-30 00:26:35 243

原创 51nod 1416 两点

数据量比较小,dfs水过#include <bits/stdc++.h>using namespace std;const int MAXN = 55;char g[MAXN][MAXN];int book[MAXN][MAXN];int n,m;bool mark = false;int dir[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};void dfs(

2017-07-30 00:24:39 251

原创 51nod 1396 还是01串

统计1的个数就是答案 假设现在有一个长度为n的串有n(n>=0)个1,这时候的合法位置就是n,你可以试着向串里插入几个0,会发现,在n位置前边插入0,要么把一个1挤到n后边,要么把一个0挤到n后边,n左边的0和右边的1始终保持相等。0插到后边不算数。。讨论里有个证明:设所有数字和为sum,k位置断开,前半段和为i,后半段为sum - i;前半段有sum - i 个 0 (题设条件),有k - su

2017-07-30 00:22:43 171

原创 51nod 1393 0和1相等串(前缀和)

前缀和O(n)搞定 把0看成-1,当某个i的前缀和prefixSum[i]和某个j的prefixSum[j]相等,则(i,j]这一段0和1个数相等。记录这个前缀和最早出现的位置,后边再出现相同前缀和时,更新答案就好#include <bits/stdc++.h>using namespace std;const int MAXN = 1e6+10;int MAX = 1e6;int inde

2017-07-30 00:10:58 220

原创 51nod 1268 和为K的组合

数据量比较小,dfs暴力水过#include <bits/stdc++.h>using namespace std;int n,k;int A[25];bool correct = false;void dfs(int cnt,int sum){ if(sum == k) { correct = true; return; }

2017-07-30 00:03:45 220

原创 51nod 1247 可能的路径

逆向思维,先证明点p1可以到点p2,然后可以从p2返回p1。然后找一点m,如果点(a,b)可以到达m,并且点(x,y)也可以到大m,则(a,b)可以到达(x,y) 相关讨论里给的证明: 给个不太严谨的证明思路: 第一步:证明路径可逆,也就是如果(a, b) -> (x, y)可行,则(x, y) - > (a, b)可行 这个比较直观,只需要分别由(a +b, b) (a, a + b),

2017-07-30 00:00:20 284

原创 51nod 1127 最短的包含字符串(尺取法)

经典尺取法#include <bits/stdc++.h>using namespace std;const int MAXN = 100010;char str[MAXN];int mark[26];bool check(){ int cnt = 0; for(int i = 0; i < 26; ++i) if(mark[i] > 0)

2017-07-29 23:55:51 244

转载 使用数组模拟邻接表

具体的思路是,在建立邻接表时,记录的不是点而是边,对于每一个点所对应的邻接表都是以栈的形式存储的,也就是说先添加的边在遍历时后取出,除此以外,所有的边用一个结构体数组存储起来,每条边对应的索引就是其编号,在建立邻接表时,表中存放的实质是边的编号,在遍历时先获得编号,在放回结构体数组中获得相应的边的数据。 下面用具体代码解释一下:int top=0;//用来确定当前边的编号 int head[M

2017-07-28 20:37:13 409

原创 hdu 1398 Square Coins(生成函数)

和hdu 1028差不多,入门的模板题。#include <cstdio>const int MAXN = 310;int C1[MAXN];int C2[MAXN];int main(){ int num; while(scanf("%d",&num) && num) { for(int i = 0; i <= num; ++i) {

2017-07-26 23:46:11 241

原创 hdu 1028 Ignatius and the Princess III(生成函数)

初学母函数。。。 http://www.wutianqi.com/?p=596 看的这个博客对母函数的讲解,不过感觉他在模板的注释中③那里注释有点错误。j指代的应该是指数,自己写两个式子算算就能看出来。#include <cstdio>const int MAXN = 130;int C1[MAXN];int C2[MAXN];int main(){ int num; wh

2017-07-26 23:44:06 258

原创 51nod 1117 聪明的木匠

优先队列,每次选出来俩最短的棍子合成的棍子,肯定比别的方案合成的棍子要短,这样每次都找到最短的,结果就是耗费体力最小的。#include <bits/stdc++.h>using namespace std;int main(){ int n,l; scanf("%d",&n); priority_queue<int,vector<int>,greater<int>> q

2017-07-26 23:16:55 228

原创 51nod 1099 任务执行顺序

感觉还是这个解释比较有说服力#include <bits/stdc++.h>using namespace std;const int MAXN = 100100;struct task{ int r,o; int der;};task ts[MAXN];bool cmp(const task& a, const task& b){ if(a.der != b.

2017-07-26 23:15:07 205

原创 51nod 1035 最长的循环节

做题之前先看论文:http://w3.math.sinica.edu.tw/math_media/d253/25311.pdf 在论文中(二)那里讲的求循环节位数,拿来直接用就搞定了http://blog.csdn.net/acmore_xiong/article/details/53841575我看这个写的也挺详细。#include <bits/stdc++.h>using namespace

2017-07-26 22:59:08 237

原创 51nod 1096 距离之和最小

把点从小到大排序,如果是奇数个点,中间那个点就是要求那点,偶数个点,中间俩点之间的区间都可以是要求的那点。假设有n个点,n为偶数。(1,n),(2,n-1)…(n/2,n/2+1),这n/2线段的长度和就是结果了。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN = 10010;LL

2017-07-26 22:48:43 232

原创 51nod 1013 3的幂的和

等比数列前n项和,快速幂取模,逆元#include <bits/stdc++.h>using namespace std;typedef long long LL;const LL MOD = 1e9+7;LL MODPOW(LL a, LL b){ LL res = 1; while(b) { if(b&1) res = res*a%MOD;

2017-07-26 22:40:17 206

原创 Codeforces Round #425 (Div. 2) B. Petya and Exam

#include <bits/stdc++.h>using namespace std;bool record[30];int star = -1;const int MAXN = 1e5+10;char pstr[MAXN];int pslen = 0;char str[MAXN];int slen = 0;bool solve(){ if(slen <= pslen-

2017-07-25 23:07:02 213

原创 Codeforces Round #425 (Div. 2) A. Sasha and Sticks

暂时也就停留在这种水两个水题的水平了#include <bits/stdc++.h>using namespace std;typedef long long LL;int main(){ LL n,k; cin >> n >> k; LL temp = n/k; if(temp%2 == 1) cout << "YES" <<endl;

2017-07-25 23:05:17 189

原创 51nod 1629 B君的圆锥

推推就出来了#include <bits/stdc++.h>using namespace std;int main(){ double s; double pi = acos(-1); cin >> s; double r2 = s/(4*pi); double ninev2 = s*s*r2-2*s*pi*r2*r2; cout << fixe

2017-07-25 23:02:24 207

原创 51nod 1596 搬货物

先全都扔到优先队列里(最小堆),然后出队最小的两个,如果相等的话,合成一个新的再扔到队列里。如果不相等,则把出队那两个其中较小的扔一个单独的数组array里,另一个大一点的再扔回队列里,直到队列为空。array的尺寸就是结果。 我做的时候最后一个没再放回队列,所以是array.size()+1#include <bits/stdc++.h>using namespace std;typedef

2017-07-25 22:58:30 346

原创 51nod 1873 初中的算术

BigDecimal大法好import java.util.*;import java.math.*;public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); String str = cin.next();

2017-07-25 22:52:54 430

原创 51nod 1433 0和5

各个位上的数字加和能被9整除,这个数就能被9整除,然后只要再在后边加个0,就可以被90整除了。 以前只知道3,看来要也要看看其他数字的倍数特性了#include <bits/stdc++.h>using namespace std;const int MAXN = 1010;int num;int zero;int five;int main(){ ios::sync_with_

2017-07-25 22:51:29 150

原创 51nod 1428 活动安排问题

正如讨论里说的:把线段转化成一个入点和一点出点,这样存下2*n个点,之后按坐标从小到大给这2*n个点排序,之后O(n)遍历一遍就好,遇到入点sum++, 遇到出点sum–,遍历时最大的sum便是答案,算上排序复杂度稳定nlogn(注意:排序时坐标相同的点出点优先)#include <bits/stdc++.h>using namespace std;struct action{ int

2017-07-25 22:48:12 223

原创 51nod 1413 权势二进制

十进制下,所有数位中的最大值。。。。这个竟然是二级。。。。#include <bits/stdc++.h>using namespace std;int main(){ int n; cin >> n; int res = 0; while(n) { if(n%10 > res) res = n%10;

2017-07-24 18:52:30 176

原创 51nod 1315 合法整数集

先从数字中去掉与X进行或运算结果不为X的数字,因为这样的数字肯定在X的某些个为0的位置上数值为1,无论如何也是去不掉的。 然后计算出X的二进制位哪些位置为1,然后从剩下那堆数字中计算X为1的位置那些数字在相应位置也为1的数字的个数。比如X二进制位的第二位为1,就计算出那些数字中有几个数字第二位为1。如果X的每个为1的位置所对应的数字个数都不为0,则一定能够通过或运算计算出X。从中选出最小的就是结果

2017-07-24 18:42:30 187

原创 51nod 1278 相离的圆

以P为圆心,R为半径的圆就是线段(P-R,P+R),对线段按照左端点从小到大排序,然后二分,二分是用每个线段的右端点来写的。#include <bits/stdc++.h>using namespace std;struct Line{ int s,e;};Line ls[50010];int n;bool cmp(const Line& l1, const Line& l2){

2017-07-24 16:36:09 197

原创 51nod 1138 连续整数的和

等差数列前n项和公式:S = na1+n(n-1)/2,a1 = (S-n(n-1)/2)/n,可以求出n的范围大概就是[2,sqrt(2*S)],枚举序列长度n,然后求解a1。using System;using System.IO;using System.Numerics;namespace timeless{ class Program { static

2017-07-24 15:17:15 201

循环小数-康明昌

讲解循环小数的数学规律

2017-08-22

循环小数性质及证明

循环小数的性质及证明

2017-07-27

Java语言程序设计第八版补充材料

Java语言程序设计第八版补充材料

2017-07-18

Qt5实现拼图+自动寻路

Qt5实现的拼图,添加了一个自动寻路的功能

2017-03-31

根据哈夫曼编码写的数据压缩解压软件(java实现)

根绝哈夫曼编码写的数据压缩解压软件

2016-11-28

QStackedLayout实现多界面切换

用QStackedLayout实现多界面切换

2016-11-12

简单架设“FTP” 工具

简简单单架设属于自己的FTP空间,绿色无毒,占空间小,使用简单方便

2011-08-13

空空如也

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

TA关注的人

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