- 博客(36)
- 资源 (1)
- 收藏
- 关注
原创 CCF NOI 2010 Day1
今天很是无聊啊 = = 一上午把作业做完了, 各种社科文, 卤代烃啊.....题解自己找就可以了 energy#include#include#includeusing namespace std;const int MAXN=100005;__int64 a[MAXN];__int64 ans;__int64 n,m;int main(){
2011-06-05 23:48:00 798
原创 dining
<br />还是一道明显的最大流.<br />#include<iostream>using namespace std;const int MAXN=100,INF=1000000;int c[MAXN*5][MAXN*5];int h[MAXN*5],vh[MAXN*5];int augc,flow;bool found;int ln,lf,ld,ll;int n,f,d;void aug(const int p);int main(){ int i,j,
2011-04-11 22:08:00 510
原创 USACO Ditch
<br />最明显的最大流了.<br />//SAP+GAP#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int MAXN=200,INF=100000000;int c[MAXN+1][MAXN+1];int h[MAXN+1],vh[MAXN+1];int n,augc,m;int flow=0;bool found;void aug(const int
2011-04-11 22:05:00 667
原创 ural 1066 Garland
<br />不难得到, (Hi+1-Hi)=(Hi-Hi-1)+2<br />设H2-H1=C<br />则 A+n*C+(n-1)*n>=0<br />即 C>=1-n-A/n<br />枚举 1...n-1, 得到C的最小值, 然后B可求.<br />#include<iostream>using namespace std;const double INF=1e10;double A,maxi=-INF,temp,n;int main(){ int i; scanf("%l
2011-02-10 22:58:00 532
原创 ural 1064 Binary Search
<br />简单的模拟, 不过要注意这组数据......<br />Sample Input<br /> <br />9999 14<br /> <br />Sample Output<br /> <br />1<br />10000 10000<br /> <br />#include<iostream>#define MAXN 10000using namespace std;int T[MAXN+2];int N,ni,nL,tot;int want[MAXN/2][2];vo
2011-02-10 22:37:00 536
原创 ural 1056 Computer Net
<br />原本想找一个DP的方法, 可惜答案鱼龙混杂, 良莠不齐, 从BYVoid牛上拷下的代码都是CE.....<br />无奈, 还是DFS吧.<br />先找一个点, 然后找到任一个距离其最远的点, 再以这点为起点搜索距其最远的点, 这两个点之间的路径就是树网的直径__之一.<br /> <br />我咨询奇异夸克大牛时, 他想到的是贪心的方法.<br />先搜一遍, 然后分情况讨论.<br />1. 若此时有数个点距起点最远, 那么起点就是中心, 且唯一.<br />2. 否则, 向那个最远点所在
2011-02-09 19:48:00 1005
原创 ural 1061 Buffer Manager
<br />我靠......这道题花费了我整整一天的时间, WA了无数次, 最后还是在奇异夸克大牛的指导下AC了.<br />原因很简单: 注意输入格式, 不只有一行.<br />我的队列方法和众人有点区别, 将'*'的价值设为非常大(这个值应该大于9*n, 但有不能太大, 否则越界了)<br />#include<iostream>using namespace std;const __int64 INF=100000000;char s[100100];__int64 A[100100]
2011-02-09 17:35:00 650
原创 ural 1060 Flip Game
<br />对于每个格子只有两种情况, 翻与不翻, 共有216=65536种方法.<br />DFS即可.<br />相比于某些狂人数百行的代码, 我的还算比较简洁......<br />#include<iostream>#define INF 0X7FFFFFFFusing namespace std;int A[6][6];char s[4][8];int T[17][2]={ {0,0}, {1,1},{1,2},{1,3},{1,4}, {2,1},{2,2},
2011-02-08 22:20:00 622
原创 ural 1053 Pinocchio
<br />这道题的本质就是求所有数的最大公约数.<br />#include<iostream>using namespace std;int n;int LCM(int a,int b){ if(b%a==0) return a; else return LCM(b%a,a);}int main(){ int i,j,k; scanf("%d",&n); scanf("%d",&j); for(i=1;i<n;i++) { scanf("%d
2011-02-08 12:41:00 478
原创 ural 1049 Brave Balloonists
<br />简单的数论.<br />#include<iostream>using namespace std;int A[10001];void div(int p);int main(){ int i,j; int temp=1; for(i=0;i<10;i++) { scanf("%d",&j); div(j); } for(i=2;i<10001;i++) temp*=A[i]+1; printf("%d/n",temp%10);
2011-02-08 12:40:00 553
原创 ural 1052 Rabbit Hunt
<br />枚举每两个点.<br />#include<iostream>using namespace std;const int MAXN=200;int n,m;int x[MAXN];int y[MAXN];int main(){ int i,j,k,dy,dx,count; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d%d",&x[i],&y[i]); for(i=0;i<n;i++) for(j=0;
2011-02-08 12:40:00 603
原创 ural 1048 Superlong Sums
<br />#include<iostream>using namespace std;short int A[1000001];int n;int main(){ int i,j,k; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d%d",&j,&k); A[i]=j+k; } for(i=n-1;i>0;i--) { A[i-1]+=A[i]/10; A[i]%=10; } for(
2011-02-07 14:22:00 558
原创 ural 1047 Simple Calculations
<br />将方程略加转换得到 (ai+1-ai)=(ai-ai-1)+2*ci<br />便很好解了.<br />#include<iostream>using namespace std;double sum,c,temp;double aN,a0;int n;int main(){ int i,j,k; scanf("%d",&n); scanf("%lf%lf",&a0,&aN); for(i=0;i<n;i++) { scanf("%lf",&te
2011-02-07 14:07:00 546
原创 ural 1044 Lucky Tickets. Easy!
<br />又是个大水题.....甚至到了可以打表的程度......<br />#include<iostream>using namespace std;int A[5][45];int tot,n;int main(){ int i,j,k; scanf("%d",&n); n/=2; A[0][0]=1; for(i=0;i<n;i++) for(k=0;k<=i*9;k++) for(j=0;j<10;j++) A[i+1][k+j]+
2011-02-07 13:34:00 1796
原创 ural 1039 Anniversary Party
刚开始想用矩阵模拟邻接链表的, MLE, 就改成暴力DP了.#include#define max(a,b) a>b?a:busing namespace std;int n;int T[6001][2];int f[6001];int up[6001];void find(int p);int main(){ int i,j,k; memset(up,false,sizeof(up)); scanf("%d",&n); for(i=1;i
2011-02-07 12:52:00 986 1
原创 ural 1038 Spell Checker
<br />我最讨厌字符串处理的题了......<br />#include<iostream>using namespace std;int tot;bool over=true;bool cap(char c){ if(c>='A'&&c<='Z') return true; else return false;}bool letter(char c){ if(c>='A'&&c<='Z'||c>='a'&&c<='z') return true; ret
2011-02-07 10:53:00 642
原创 ural 1263 Elections
<br />累了, 刷道水题休息一下......<br />#include<iostream>using namespace std;double x;int V[10001];int n,m;char c=37;int main(){ int i,j,k; scanf("%d%d",&n,&m); for(i=0;i<m;i++) { scanf("%d",&j); V[j]++; } for(i=1;i<=n;i++) { x=
2011-02-06 14:27:00 474
原创 ural 1036 Lucky Tickets
<br />DP. 状态方程挺简单的, 本题主要考的就是滚动数组和高精度.<br />注意输出为0的情况.<br />#include<iostream>using namespace std;const int MAXL=70;const int MAXS=1000;const int BIG=100000000;__int64 T[MAXS+1][MAXL*2];int n,s;void add(int x,int y){ int i; for(i=0;i<MAX
2011-02-06 13:43:00 715
原创 ural 1033 Labyrinth
一道 flood fill.如果你WA了, 那么请注意: 这个迷宫可能不通, 要两头搜.#includeusing namespace std;int n;char s[35][40];int A[37][37];int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};int went[37][37];int tot;void floodfill(int x,int y){ int i; if(went[x][y]) return;
2011-02-05 22:02:00 848
原创 ural 1032 Find a Multiple
<br />我们用A[i]记录每一个数, 用sum[i]记录从1到i的各数之和余n, T[i]记录上一个和的余数为i出现的地方.<br />那么每次有以下几种情况:<br />1, sum[i]==0, 则区间为1到i;<br />2, T[sum[i]]!=0, 则区间为T[sum[i]]+i到i;<br />3, T[sum[i]]==0, 记录T[sum[i]]=i.<br />#include <iostream>using namespace std;int n,A[10001];in
2011-02-05 21:40:00 833
原创 ural 1031 Railway Tickets
<br />经典的DP问题.<br />#include<iostream>using namespace std;const int INF=1000000001;int l1,l2,l3,c1,c2,c3,n;int dis[10001];int T[10001];int main(){ int i,j,k; int x,y; scanf("%d%d%d%d%d%d",&l1,&l2,&l3,&c1,&c2,&c3); scanf("%d",&n); sc
2011-02-05 21:21:00 516
原创 ural 1029 Ministry
<br />DP, 状态转移方程为T[i][j]=max{T[i][j-1],T[i-1][j],T[i][j+1]}+A[i][j];<br />由于这个DP方程有后效性, 采用迭代动归(经典题目参见"滑雪")<br />#include<iostream>using namespace std;const int INF=1000000001;int A[101][503];int T[101][503];int from[101][500];int dir[3][2]={{0,
2011-02-04 17:15:00 487
原创 ural 1028 Stars
<br />树状数组或线段树.<br />#include<iostream>using namespace std;const int MAXX=32001;const int MAXN=15000;int Sum[MAXN+1],T[MAXX+1];int n;inline int lowbit(int x){ return x&(-x);}void add(int x){ while(x<=MAXX) { T[x]++; x+=lowbi
2011-02-04 16:31:00 562
原创 ural 1026 Questions and Answers
<br />这道题的目的很明显, 就是桶, 当然100,000的数据O(nlogn)的排序也是能做的.<br />#include<iostream>using namespace std;int n,q;int A[5001];char s[10];int query(int p){ int i,temp=0; for(i=1;i<5001;i++) { if(temp+A[i]<p) temp+=A[i]; else return i; }}i
2011-02-04 14:24:00 508
原创 ural 1025 Democracy in Danger
<br />简单的贪心.<br />#include<iostream>using namespace std;int A[105];void swap(int i,int j){ int temp; temp=A[i]; A[i]=A[j]; A[j]=temp; return;}int main(){ int i,j,k; int n,tot=0; scanf("%d",&n); for(i=1;i<=n;i++) { scanf
2011-02-04 13:36:00 484
原创 ural 1024 Permutations
<br />这里要用到点组合的知识了.<br />引理: 对于P中任意元素i, 存在k, 使得Pk(i)=i.<br />然后就很好办了.<br />#include<iostream>const int MAXN=1000;int P[MAXN+1];int has[MAXN+1];int n,ans=1;int LCM(int i,int j){ int temp; if(i<j) { temp=i;i=j;j=temp; } if(i%j==0) return j;
2011-02-03 14:19:00 461
原创 ural 1022 Genealogical Tree
<br />Topological Sort.<br />#include<iostream>using namespace std;int n;int A[101][101];int f[101];int seq[101];int main(){ int i,j,k=0,flag=1; scanf("%d",&n); for(i=1;i<=n;i++) { while(scanf("%d",&j)&&j) { A[i][0]++; A[i][A[i]
2011-02-03 13:36:00 450
原创 ural 1023 Buttons
<br />看到这个题, 不难让我们回忆起小学接触过的拿硬币问题(是甲和乙拿的, 还是别人拿的, 随便),<br />假设一次最多能拿N个, 那么后者的策略就是拿的硬币数=N+1-前者的.<br />这道题就是让你找到最小的N被给定值整除即可.<br />至于为什么要整除, 显然.<br />#include<iostream>using namespace std;int main(){ int i,j,k; int n; scanf("%d",&n); for(i=3;i<=
2011-02-03 13:34:00 515
原创 ural 1019 Line Painting
<br />一道离散化的题目.<br />灰常猥琐的边界, 导致我WA#3又WA#9又WA#13又WA#14才AC.<br />所谓离散化, 就是把原先最傻的hash表变小.<br />因为我们只用到题目中的某些点, 那么用这些点为坐标, 记录颜色情况就好了.<br />注意边界: 0 和 10^9.<br />推荐事先放到表里, 这样就不用做边界了.<br />我做到WA#14才发现这个问题, 没法改了, 大家凑合看吧.<br />#include<iostream>using namespace s
2011-02-02 01:36:00 685
原创 ural 1015 Test the Difference!
<br />有的童鞋干脆把所有排列方式归类了......例如这个叫brainail的家伙<br />灰常强悍的做法:<br />#include<iostream>#include<vector>using namespace std;#define forr(i,x,y) for(int i=(int)(x); i<=(int)(y); i++)int p[24][6]={{1,2,3,4,5,6},{1,2,6,5,3,4},{1,2,4,3,6,5},{1,2,5,6,4,
2011-02-01 18:36:00 559
原创 ural 1017 Staircases
http://blog.csdn.net/heartnheart/archive/2010/11/22/6028103.aspx这里有O(n^3)和O(n^2)的算法.下面介绍个O(n^3/2)的.令T[i][j]=满足条件的楼房(用了i 块砖)中最底层是j 块的方法数.转移方程是T[i][j]=T[i-j][j]+T[i-j][j-1];有的人也许会问, 这个为什么是O(n^3/2)呢.原因很简单: 这是个单增的楼梯呀.如果底层为j, 那么i 至少为 1+2+3+...+j = (j+1)*j/2;代码如
2011-02-01 18:22:00 653
原创 ural 1014 Product of Digits
<br />首先面对此题,最不该做的就是暴搜. U no it.<br />于是我们想到桶!<br />首先质因数分解(2,3,5,7), 如果n>1直接output -1.<br />然后我们就要把桶里面的数的个数压缩.<br />8=2*2*2 当然首当其冲.<br />然后是 9=3*3<br />然后是 6=2*3<br />然后是 4=2*2<br />这么做是对的, 不过一直感觉说不太明白, Wittgenstein告诉我们: 沉默.<br />然后就可以提交了.<br />如果你真的照上面做了
2011-01-31 00:26:00 750 2
原创 ural 1009 1012 1013 K-Based Numbers V1.0/2.0/3.0
<br />看来我就是讨厌麻烦的题啊...跳过去这么多实现题...<br />不过此题在思路上和实现上均不难.<br />我的代码里:<br />A[i]=满足条件的i位数中末尾不为0的, B[i]=满足条件的i位数中末尾为0的.<br />那么递推方程就很简单了:<br />A[i]=(A[i-1]+B[i-1])*(k-1)<br />B[i]=A[i-1]<br />结果是A[n]+B[n].<br />其实搞了半天我们发现B[i]的存在就是多余的, 直接A[i]=(A[i-1]+A[i-2])*(k
2011-01-30 23:54:00 734
原创 ural 1005 stone pile
<br />动归.<br />注: 我发现ural的时间限制很宽裕但空间限制很BT...所以总是有Crash的现象...<br />#include<iostream>using namespace std;int W[30],n,tot,temp;bool T[5000001];int main(){ int i,j,k; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&W[i]); tot+=W[i];
2011-01-30 13:02:00 542
原创 ural 1002 phone numbers
这是一道动归题, 算法复杂度为 O(n*len).#includeusing namespace std;const int MAX=10000;char str[105];int n;char s[50002][55];int f[105][2];int l,len[50002];int T[26]={2,2,2,3,3,3,4,4,1,1,5,5,6,6,0,7,0,7,7,8,8,8,9,9,9,0};///////////a,b,c,d,e,f,g,h,i,j,k
2011-01-30 12:30:00 781 1
原创 ural 1001 Reverse Root
水题一道. 沉默. #include#include__int64 A[700000];int main(){ int i=0; while( scanf("%I64d",&A[i++])!=EOF ) {} i--; while( i-- ) printf("%.4lf/n",sqrt((double)A[i])); return 0;}
2011-01-30 12:21:00 646
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人