算法
文章平均质量分 51
菩提树下小沙弥
不忘初心 方得始终
展开
-
zoj分类
ZOJ题目分类初学者题:1001 1037 1048 1049 1051 1067 1115 1151 1201 1205 1216 1240 1241 1242 1251 1292 1331 1334 1337 1338 1350 1365 1382 1383 1394 1402 1405 1414 1494 1514 1622 1715 1730 1755 1760 1763 17转载 2014-01-04 16:50:31 · 3225 阅读 · 0 评论 -
ZOJ 3752 The Three Guys
The Three Guys三个人围成一个圆圈,所以a,b,c和a,c,b等组合其实是相同的。只要考虑这个人是顺时针还是逆时针即可,有8种情况。对于每种情况,6个线段围成一圈,分成三角形的三条边,求面积即可#include#include#include#includeusing namespace std;double ans;double s(原创 2014-01-29 20:31:45 · 931 阅读 · 0 评论 -
ZOJ 3751 Diagonal
Diagonal数学题啊,偶数我们推导出来了。奇数是队友写了暴力程序跑了半天才出来#include#includeint main(){ int n; while(~scanf("%d",&n)){ int ans=0,val=n*n; for(int i=0;i<n-1;i++) ans+=val,val-=2; ans+=(val+2)/2;原创 2014-01-29 19:06:43 · 1276 阅读 · 0 评论 -
NBUT 1537 Travel
[1537] Traveldfs+dp 初始化的时候写了i#include#includeconst int N=50,inf=1e9;char scene[N];int dp[N][N];//表示在i场景需要j个男 所需最小女个数int start[N],cnt;struct edge{ int v,next;}e[N*N*2];void add(i原创 2014-01-28 15:41:04 · 644 阅读 · 0 评论 -
NBUT 1538 Submartix
[1538] K-Submartix比较笨,写出了O(n^4),果断超时。看了队友的代码,优化到了O(n^3)。#include#define areaSum sum[ex][ey]-sum[ex][sy-1]-sum[sx-1][ey]+sum[sx-1][sy-1]const int N=252;int a[N][N],row[N][N],sum[N][N];/原创 2014-01-28 14:06:24 · 579 阅读 · 0 评论 -
HDU 4602 Partition
首先是数学问题:划分可以把问题看成n个点,取k个点有几种不同的方案情况1:这k个点在两端,有2种情况,还剩n-k-1个位置用来划分情况2:这k个点不在两端,有n-k+1-2种情况,还剩n-k-2个位置用来划分于是2*2^(n-k-1)+(n-k-1)*2^(n-k-2) 化简为 (n-k+3)*2^(n-k-2)然后2的(n-k-2)次方会超时,那么就要用降幂法优化原创 2014-02-03 13:06:07 · 674 阅读 · 0 评论 -
ZOJ 3753 Simple Equation
AX+BY=XY X>=M变换公式(x-b)(y-a)=ab x+y要min就是x-b+y-a min将a和b因式分解,找到最接近m-b的那个因子的组合。原创 2014-02-06 10:54:26 · 951 阅读 · 0 评论 -
HDU 4604
求双队列的最长非递减序列考虑题目的一个简化版本:使双端队列单调上升。找到队列中最早出现的数组Ax,则Ax将Q分成的两个部分分别是原序列中以Ax开始的最长上升子序列和最长下降子序列。答案即为这两者之和的最大值,而对于本题,由于存在相同元素,所以只要找到以Ax为起点的最长不下降序列和最长不上升序列的和,然后减去两个里面Ax次数的最小值。(比如1 2 3 1 1。最长不下降1 2 3,最转载 2014-02-03 19:17:04 · 663 阅读 · 0 评论 -
ZOJ 3755 Mines
Mines参考了队友的代码,大神为啥总是不爱把代码贴出来呢...#include#include#define Mines les[c][i]=mp[c][i]-f(x&bit[i])-f(x&bit[i+1])-f(y&bit[i])-f(y&bit[i+1])const int N=11,M=1<<11;int n,m,ans;int bit[N],num[原创 2014-01-29 18:49:46 · 1068 阅读 · 1 评论 -
hdu 4235 Vampire Numbers 模拟+优化
开始一直wa,想不通,后来发现x=100W但下一个vp数可能大于100W,数组越界了。多开10W又如何- -!#include#include#includeusing namespace std;const int N=1100000;int ans[N],num[10];void func(int k,int c){ while(k){ num[k%10]+=c;原创 2014-02-22 15:11:33 · 689 阅读 · 0 评论 -
CF 101D Castle
D. Castle#include#include#include#includeusing namespace std;const int N=100005;typedef long long LL;struct edge{ int v,next,d;}e[N*2];int cnt=1,start[N];LL num[N],len[N],curLen[N],t原创 2014-02-16 19:35:45 · 765 阅读 · 0 评论 -
CF 101C - Vectors
op1:选择90度,所以有4个方向(x,y) (-y,x) (-x,-y) (y,-x)op2:增加c,因为能旋转,所以可以得出k1(cx,cy)+k2(-cy,cx)=(vx,vy)值得注意的是vx,vy也有4个方向还有运算要用long long#includetypedef long long LL;LL x1,y1,x2,y2,a,b;bool check(LL x,原创 2014-02-16 20:38:57 · 623 阅读 · 0 评论 -
ZOJ 2165 Red and Black
格子类搜索#include#include#includeusing namespace std;const int N=22;char mp[N][N];int n,m,ans,visit[N][N];int v[4][2]={0,1,0,-1,1,0,-1,0};void dfs(int x,int y){ visit[x][y]=1; ans++; for(int原创 2014-02-18 21:45:48 · 554 阅读 · 0 评论 -
ZOJ 1589 Professor John
加一个记录数组mp2简单很多,不然用vector加入后排序输出#include#include#include#include#include#includeusing namespace std;const int N=105;char str[4];int mp[28][28],mp2[28][28];int main(){ int tt,n,t; for(cin原创 2014-02-18 22:35:57 · 623 阅读 · 0 评论 -
zoj 3781 Paint the Grid Reloaded
#include#include#include#includeusing namespace std;const int N=42;char mp[N][N];int mem[N][N],visit[N][N];int dir[4][2]={1,0,-1,0,0,1,0,-1};int tt,n,m;struct Point{ int x,y; Point(int _原创 2014-04-16 18:09:01 · 606 阅读 · 0 评论 -
zoj 3780 Paint the Grid Again
#include#include#includeusing namespace std;const int N=1502;int tt,n;char mp[N][N];bool col[N],row[N];bool check(){//是否全部完成 for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(mp[i][j]!='-原创 2014-04-16 12:11:14 · 755 阅读 · 0 评论 -
hdu 4565 So Easy! 矩阵快速幂
证明见:http://blog.csdn.net/crazy______/article/details/9021169之后就是矩阵快速幂了#include#include#includeconst int N=2;typedef long long LL;struct Matrix{ int a[N][N]; void init(){ memse原创 2014-03-31 20:14:44 · 521 阅读 · 0 评论 -
hdu 4006 The kth great number 优先队列
用优先队列(小的在队头),只保存最大的k个数。队头是k个数中最小的,就是第k大。#include#includeusing namespace std;struct node{ int val; bool operator <(node T)const{ return val>T.val; }}t;int main(){ int n,k,val; char op[原创 2014-04-01 20:32:28 · 476 阅读 · 0 评论 -
Skyscrapers 组合数学
题目大意:对于一行n个数的数组,从左边(必须包含第一个)的最长递增长度为left,从右边为right,求符合条件的情况数。例1:1 3 2和 2 3 1例2:4 1 2 3 和 4 2 1 31.由于最高的那个一定能被看到,所以可以枚举highest的位置。设dp[i][j]为i个数有j个递增的种数2.对于位置i,从n-1个数里选i-1个数放左边,并且左边有l原创 2014-04-03 21:03:21 · 714 阅读 · 0 评论 -
最长公共子序列
最长公共子序列Time Limit: 4000ms, Special Time Limit:10000ms, Memory Limit:65536KBTotal submit users: 50, Accepted users: 36Problem 11313 : No special judgementProblem description原创 2014-04-03 17:22:46 · 605 阅读 · 0 评论 -
You Win! 状态压缩dp
题目大意:有三种操作:(每个1步)1.A-Z的字母,按up或down来改变大小,down A-Z up Z-A2.左右移动cursor逐个字母移动3.按FIRE确认求一串字母(最多18个)最少要多少步?题目地址:传送门源码:#include #include const int N=19;int bt[N],dist[26][26];i原创 2014-04-03 22:57:54 · 515 阅读 · 0 评论 -
ZOJ 3768 Continuous Login
#include#include#includeusing namespace std;const int N=15715;int sum[N],goal;void solve(int n){ int left=1,right=lower_bound(sum,sum+N,n)-sum,t; while(left<=right){//夹逼定理 t=sum[right]+sum原创 2014-04-06 16:57:17 · 957 阅读 · 0 评论 -
ZOJ 3770 Ranking System 模拟
#include#include#includeusing namespace std;struct node{ int id,time,s,loc;}p[2005];int cmp(node a,node b){ if(a.s!=b.s) return a.s>b.s; if(a.time!=b.time) return a.time<b.time; return原创 2014-04-06 16:59:52 · 1011 阅读 · 0 评论 -
数细菌 提醒自己注意细节
数细菌#include#include#includeusing namespace std;typedef long long LL;LL a,b,n;int main(){ int tt; cin>>tt; while(tt--){ cin>>a>>b>>n; LL t1=(b-a)/2; LL t2=a-t1;//(2*a-b)/2错误比如1 3 do原创 2014-04-27 10:43:45 · 550 阅读 · 0 评论 -
hdu 4907 Task schedule
题意:给出N个数和M次查询,每次查询是zhao原创 2014-08-05 08:23:09 · 436 阅读 · 0 评论 -
hdu 4908 BestCoder Sequence
题意:给出N和M表示N个数的一个原创 2014-08-05 09:11:34 · 429 阅读 · 0 评论 -
hdu 4965 Fast Matrix Calculation 矩阵乘法
#include#include#include#include#include#include#includeusing namespace std;typedef long long LL;#define inf 0x3f3f3f3f#define mem(a,x) memset(a,x,sizeof a);const int MAXN=1002,N=7;int n,k原创 2014-08-19 17:58:02 · 561 阅读 · 0 评论 -
BNU 34988 Happy Reversal
#include#include#include#include#includeusing namespace std;typedef long long LL;const LL inf=0x3fffffffffffffff;char str[62];vector a;LL trans(char str[]){//高位-低位 LL ret=0; for(int原创 2014-09-17 13:37:46 · 503 阅读 · 0 评论 -
hdu 4906 Our happy ending 状态压缩dp 较难
#include#include#includeusing namespace std;typedef long long LL;const int N=1<<20,MOD=1e9+7;int dp[N+10];//状态s表示能产生的 和的集合(1-K) 的情况数int main(){ int tt; cin>>tt; while(tt--){ in原创 2014-10-20 21:47:31 · 531 阅读 · 0 评论 -
hdu 4902 Nice boat 线段树
如果一个xiand#include#include#includeusing namespace std;const int N=100005;int tree[N*4];//该线段的值全为x,-1表示不统一int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}#define lson l,m,rt<<1#define r原创 2014-10-20 19:56:55 · 520 阅读 · 0 评论 -
BestCoder Round #14 hdu 5066 - 5069
A#includeint main(){ int a,b; while(~scanf("%d %d",&a,&b)){ printf("%d\n",a+a-b); } return 0;}B原创 2014-10-20 16:16:41 · 704 阅读 · 0 评论 -
CF #274 (Div. 2) 479B - 479D
#include#include#include#includeusing namespace std;struct Node{ int a,b;}t[5002];int cmp(Node a,Node b){ if(a.a==b.a) return a.b<b.b;//my wa point return a.a<b.a;}int n;int原创 2014-10-20 15:54:47 · 516 阅读 · 0 评论 -
hdu 5067 Harry And Dig Machine
#include #include#include#includeusing namespace std;typedef long long LL;#define inf 0x3f3f3f3fconst int N=11;int x[N],y[N];int mp[N][N];int dp[1<<N][N];int dis(int i,int j){ return a原创 2014-10-18 22:01:11 · 590 阅读 · 0 评论 -
二人零和博弈
博弈论方法1:dp,记忆化搜索方法2:结论——异或和为0为P-position关于Nim游戏结论的证明:根据定义,证明一种判断position的性质的方法的正确性,只需证明三个命题: 1、这个判断将所有最终 position判为P-position;2、根据这个判断被判为N-position的局面一定可以移动到某个P-position;3、根据这个判断被原创 2014-09-18 15:53:18 · 2803 阅读 · 1 评论 -
hdu 5007 Post Robot
#include#include#includeusing namespace std;char ans[2][20]={"MAI MAI MAI!","SONY DAFA IS GOOD!"};string str;int main(){ while(cin>>str){ int len=str.length(); for(int i=0;i原创 2014-09-18 13:45:42 · 558 阅读 · 0 评论 -
BNU 34985 Elegant String
一个字符串的任何子串都不是0-k的某个原创 2014-09-17 15:45:14 · 546 阅读 · 0 评论 -
BNU 34982 Beautiful Garden
#include#include#include#includeusing namespace std;const int N=42;#define rep(i,b,e) for(int i=b;i<e;i++)typedef long long LL;int n;LL a[N];map mp;int solve(){ if(n<=2) return 0; s原创 2014-09-17 13:43:00 · 537 阅读 · 0 评论 -
Linux fork()创建子进程
fork()的原理原创 2014-05-04 17:26:48 · 869 阅读 · 0 评论 -
2014 百度之星 资格赛 Xor Sum hdu 4825
d#include #include #includestruct node{ int cnt; node *childs[2]; node(){ cnt=0; for(int i=0;i<2;i++) childs[i]=NULL; } }; node *rt=new node(); node *cur,*next;原创 2014-05-19 16:33:35 · 731 阅读 · 0 评论 -
2014 百度之星 资格赛 Labyrinth
由于#include#includeusing namespace std;const int N=102,inf=1e9;int n,m,a[N][N];int dp[N][N];//在i,j能获得的最大金币int sum[N][N];void solve(){ dp[1][1]=0; for(int j=1;j<m;j++){//列 for(int i=1;原创 2014-05-19 16:43:46 · 556 阅读 · 0 评论