- 博客(43)
- 收藏
- 关注
原创 网络流Dinic算法
#include <iostream>#include <cstdlib>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <queue>using namespace std;const int MAXN = 210;const int MAXM = 210*210;c
2017-08-16 15:48:44
388
原创 Codeforces 768B Code For 1 (简化版线段树)
#include<iostream>using namespace std;typedef long long ll;ll query(ll n,ll L, ll R ,ll l, ll r){ if(R<l||L>r||n==0) return 0; if(n==1)return 1; ll mid = (l+r)>>1; return qu
2017-08-07 19:43:49
372
原创 Codeforces 578C Weakness and Poorness
题目描述:给出一个数列,找出一个数x,使这个数列中每一个元素都减去x值所得的绝对值的和最小。 题目分析:当x非常大时,最终的答案值也会很大;当x为0时,一定可以找出一个大于0的值使每个元素减去它的答案值变小,因此这是一个三分题目。#include <cmath>#include <cstdio>#include <cstdlib>#include <cstring>#include <io
2017-08-07 19:36:32
348
原创 Gym 101194D Ice Cream Tower (双指针扫描)
这道题的重要方法之一是双指针扫描,它的时间复杂度只有O(N)/*双指针扫描*/#include<iostream>#include<algorithm>using namespace std;typedef long long ll;const int maxn = 300005;ll a[maxn],b[maxn];int t,T,n,k;bool judge(int x){
2017-08-07 19:30:13
485
原创 Codeforces 9C Hexadecimal‘s number (DFS)
给出一个数,判断不大于它的数中有多少个只由0,1组成// 这种方法针对只给出一个数据非常容易,仅仅是单纯的DFS#include<iostream>#include<stdio.h>#include<map>using namespace std;long long int ans = 0;map<int ,int >vis;int n;void DFS(int x){
2017-08-07 19:27:14
323
原创 POJ 1011 Sticks
用当前的木棍拼木棒,问能拼成x(x>=1)根等长木棒的最小长度是多少 首先考虑由最大的木棒开始拼,边界条件为所有木棍拼接成一根木棒,因此答案就在max~sum之间枚举。注意一个需要满足的性质是,木棒的总长度sum%当前长度len==0,因为要拼成整数个等长木棒,进行搜索即可#include<iostream>#include<algorithm>#include<cstring>using
2017-08-07 19:12:25
234
原创 HDU 4771 Stealing Harry Potter's Precious
旅行商问题,状压dp 用一个二进制数表示是否走过当前的几个位置#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <string>#include <math.h>#include <stdlib.h>using namespace std;int n,m;ch
2017-08-07 19:06:34
275
原创 博弈论(阶梯博弈)POJ 1704
阶梯博弈:博弈在一列阶梯上进行,每个阶梯上放着自然数个点。两个人进行阶梯博弈,每一步则是将一个集体上的若干个点( >=1 )移到前面去,最后没有点可以移动的人输
2017-08-05 23:21:23
467
原创 博弈论(斐波那契博弈)
斐波那契博弈:有一堆物品,两人轮流取物品,先手最少取一个,至多无上限,但不能把物品取完,之后每次取的物品数不能超过上一次取的物品数的二倍且至少为一件,取走最后一件物品的人获胜。
2017-08-05 23:12:39
1051
原创 博弈论(尼姆博弈)
尼姆博弈:有任意堆物品,每堆物品的个数是任意的,双方轮流从中取物品,每一次只能从一堆物品中取部分或全部物品,最少取一件,取到最后一件物品的人获胜。
2017-08-05 23:11:12
834
原创 博弈论模型(威佐夫博弈)
威佐夫博弈:有两堆各若干的物品,两人轮流从其中一堆取至少一件物品,至多不限,或从两堆中同时取相同件物品,规定最后取完者胜利。
2017-08-05 23:04:27
954
原创 POJ 3922 A simple stone game(K倍减法游戏)
两人取一堆石子,石子有n个。 先手第一次不能全部取完但是至少取一个。之后每人取的个数不能超过另一个人上一次取的数的K倍。拿到最后一颗石子的赢。先手是否有必胜策略?若有,先手第一步最少取几个?
2017-08-05 22:40:49
431
原创 POJ 3692 Kindergarten
bool find(int x){ int i,j; for (j=1;j<=m;j++){ //扫描每个被匹配的物体 if (line[x][j]==true && used[j]==false) //如果有联系并且还没有标记过(这里标记的意思是这次查找曾试图改变过该物体的归属问题,但是没有成功,所以就不用瞎费工夫了)
2017-08-05 02:27:31
282
原创 POJ 2349 Arctic Network
Arctic Network #include<stdio.h>#include<math.h>#include<algorithm>using namespace std;int father[550], m, k;double d[550];struct post{ double x, y;}p[550];struct edge{ int u, v;
2017-08-05 01:05:43
240
原创 POJ 3552
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int VM=110;const int INF=999999999;struct Edge{ int u,v; int cap;}edge[VM*VM];int n,m,ans,fa
2017-08-05 01:04:18
290
原创 HDU 1569 find the safest road
这道题用Floyd和dijkstra均可以解出。 将各条路径的成绩值维护一下即可,也可以对各条路上的权值取对数,这样所有的路都变成了负值。找乘积的最大值,也就是找负值的最大值即可,贴出第一种方法的AC代码:#include<iostream>#include<stdio.h>using namespace std;double safe[1010][1010];//double map[1
2017-08-04 23:24:37
261
原创 快速幂模板
快速幂问题:ll quick_pow(ll a,ll b,ll m){ ll ans=1; while(b) { if(b&1){ ans=ans*a%m; } b=b>>1; a=a*a%m; } return ans;}
2017-08-04 23:09:57
246
转载 邻接表模板存储稀疏图的边
邻接表#include<stdio.h>#include<string.h>int head[100100];//表头,head[i]代表起点是i的边的编号 int cnt;//代表边的编号 struct s{ int u;//记录边的起点 int v;//记录边的终点 int w;//记录边的权值 int next;//指向上一条边的编号 }edg
2017-08-04 23:08:40
428
原创 Trie树(2)
Trie树POJ Shortest Prefixes HDU What Are You Talking About北大ACM Babefish
2017-05-23 10:19:45
383
原创 Codeforces Round #411(A. Fake NP; B. 3-palindrome; C. Find Amir; D.Minimum number of steps)
A. Fake NP 题解:给定一个闭区间的两个端点,试判断在此区间内所有数字的非1公因子出现最多的数字。如果有多个,给出其中一个就可以了。这道题比较讨巧的方法试直接输出2。 B. 3-palindrome 题解:题目要求用由‘a’,‘b’‘c’三个字母组成给定长度的字符串,其中不能包含长度超过三的子回文串,同时要保证‘c’的使用尽可能少。 本题只需要根据给定长度是否为3的倍数就可以分情
2017-05-05 01:47:32
735
原创 VJ水题——今年暑假不AC(简单贪心)
本题是贪心算法,还算比较简单啦。思路是:先找结束时间最早的一个电视节目。因为假使节目的结束时间变晚,就有可能会阻挡住下一个节目的开始时间,那样的话最后收看的电视节目数不会再多,也就是结果不会变得更好。 也就是说,我只需要对n个电视节目的结束时间进行递增排序。如果结束时间相同,因为我需要对n个电视节目都进行判断,在这时我需要让节目的开始事件递增排序。 能够做到这一条件的有sort函数。今天好不容易
2017-02-06 11:53:12
364
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人