自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Tractatus Logico-Philosophicus

The Realm of Antagonism77

  • 博客(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

部分ural 测试数据

含有部分ural的测试数据, 下载后请解压

2011-02-01

空空如也

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

TA关注的人

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