02 2013 档案
摘要:题意:引爆一个炸弹会同时引爆与它相距d的炸弹重点:由于x,y坐标的范围很大,所以必须离散化,显而易见。在这里可以利用sort+unique进行离散化并存储在myhash中。其次由于一个点可能多次放炸弹,但只有一次有效,所以用一个vis数组记录所以对于任意一个炸弹(x,y,d)。首先由x-d,x+d在myhash中确定y在set的范围first_pos,last_pos然后 再在set中按照y的范围寻找。。。View Code 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #incl.
阅读全文
摘要:题意:给定n,m,c 和 k个数求最小的一个数(这个数是c进制,且是n的倍数)一共5000个状态,bfs不会写DFS啊。。。。不过看了别人的BFS后还是有种恍然大悟的感觉。。。。View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string> 4 #include<algorithm> 5 #include<math.h> 6 #include<iostream> 7 #include<queue> 8 using namespace s
阅读全文
摘要:水题~~字符串的处理+排序View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 const int maxn = 5005; 6 struct node{ 7 char name[ 105 ]; 8 int win,lost,diff,score; 9 }team[ maxn ];10 int cnt;11 void init( int n ){12 for( int i=0;i<=n;i++ ){13 team
阅读全文
摘要:题意:给定一张图,求从1到n+1的最长距离。bfs即可,没什么技巧。View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<algorithm> 5 #include<queue> 6 #include<stack> 7 using namespace std; 8 const int maxn = 105; 9 const int maxm = 10000; 10 const int inf = 99999999
阅读全文
摘要:1219 水~View Code 1 #include<stdio.h> 2 #include<string.h> 3 const int maxn = 30; 4 int a[ maxn ]; 5 char s[ 100005 ]; 6 int main(){ 7 while( gets( s )!=NULL ){ 8 memset( a,0,sizeof( a ) ); 9 int len=strlen( s );10 for( int i=0;i<len;i++ ){11 if( s[i]>='a'&&s[...
阅读全文
摘要:题意:给定一张图,从1到n,若能随便去除一条路,问最短路?注意:两点可能存在多条路,这时 事实上只要保存下第一短和第二短的,然后在枚举的时候每次去除一条换上第二短的路。。。。。这样最后就能得到ans。(若存在某种方法使得1不能到n,则break,print -1 )View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<queue> 5 #include<algorithm> 6 using namespace std; 7
阅读全文
摘要:题意:给定一张图,每个点都有一个power值,到每个点都要一定的距离 消耗一定的油量,求从0出发到某些点 使得 油量消耗最少且power值达到一半。可以floyd或者spfa求出0到各点的距离 dis[ maxm ]。然后就可以转化为:从dis[]中挑出某些点,使得距离和最小且power值达到某个值。从01背包中可以发现:从给定的一些物品中挑出一些放入一个背包中,使得不超过背包体积。这是我们可以把dis当做每个物品的体积,power当做价值。然后从dp中搜到一个power值满足条件的最小的 i 即可View Code 1 #include<stdio.h> 2 #include&l
阅读全文
摘要:题意 给定一张图,计算从1到各点的最短距离+各点到1的最短距离。spfa即可,分别正向,反向建一个图。水~View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<queue> 5 #include<algorithm> 6 using namespace std; 7 const int maxn = 1000005; 8 const int maxm = 1000015; 9 const int inf = 99999999
阅读全文
摘要:题意:给定一些人,这些人要到同一个地点去,求最先到达的人。spfa(反向加边就行) 水~View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<queue> 5 #include<algorithm> 6 using namespace std; 7 const int maxn = 315; 8 const int maxm = 5015; 9 const int inf = 9999999; 10 int cnt,head
阅读全文
摘要:水题~~~不要去关心题意中为什么10进制38在火星上表示成1110,其实我也不知道,但是这并不影响做题。例如:4,2,0 1,2,0个位0+0=0<2 所以就是02+2>3 所以为1 且进位14+1+1(进位)=6>5 所以就是1结果 1 1 1 0View Code 1 #include<stdio.h> 2 #include<math.h> 3 #include<string.h> 4 #include<stdlib.h> 5 #include<algorithm> 6 using namespace std;
阅读全文
摘要:水题~~~注意:若k比a,b大,默认没有的位数上为0!View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 int main(){ 6 int a,b,k; 7 while( scanf("%d%d%d",&a,&b,&k)!=EOF ){ 8 if( a==0&&b==0 ) 9 break;10 char aa[ 24 ],bb[ 24 ];11 mems
阅读全文
摘要:题意:s到t的第K短路View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<stdlib.h> 5 #include<algorithm> 6 #include<queue> 7 using namespace std; 8 const int maxn = 1005; 9 const int maxm = 200005; 10 const int inf = 9999999; 11 struct node{ 12
阅读全文
摘要:SPFA题意:给定一张图,从1到n。求1到n的最短路,但是可能存在某条路被阻断了,即为inf了。这条路必定是存在最短路中。所以枚举最短路中的路径。。。。View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<queue> 5 #include<algorithm> 6 using namespace std; 7 const int maxn = 1005; 8 const int maxm = 1005*500; 9 con
阅读全文
摘要:题意:s到e,最短时间且至少经过k条边dis[ i ][ j ]:表示s到i至少经过了j条边的最少时间!二维spfaView Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<queue> 4 #include<algorithm> 5 #include<stdlib.h> 6 using namespace std; 7 const int maxn = 5005; 8 const int maxm = 100005; 9 const int inf = 9999999
阅读全文
摘要:最短路floydView Code 1 #include<stdio.h> 2 #include<string.h> 3 const int maxn =11; 4 int sea[ maxn ]; 5 int mat[ maxn ][ maxn ]; 6 const int inf=999999; 7 8 void init(){ 9 memset( sea,0,sizeof(sea));10 for( int i=0;i<maxn;i++ )11 for( int j=0;j<maxn;j++ )12 mat[ i ][ j ]=...
阅读全文
摘要:题意:给定一些单词,前一个的尾和后一个的头相同时,才表示他们相连求最短路View Code 1 #include<stdio.h> 2 #include<string> 3 #include<stdlib.h> 4 #include<queue> 5 #include<map> 6 #include<algorithm> 7 using namespace std; 8 const int maxn = 1015; 9 const int inf = INT_MAX; 10 //map<string,int>m
阅读全文
摘要:题意:从一点到另外一点的最短距离因为点的个数较小 用floydView Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<algorithm> 5 #include<queue> 6 using namespace std; 7 const int maxn = 81; 8 struct node{ 9 int mat[ maxn ][ maxn ]; 10 }a[ maxn ]; 11 struct node2{ 12 int
阅读全文
摘要:题意:找一条从第一行到最后一行的最短路dfs用于重新建图。bfs即可View Code 1 #include<stdio.h> 2 #include<queue> 3 #include<string.h> 4 #include<stdlib.h> 5 #include<map> 6 #include<algorithm> 7 using namespace std; 8 const int maxn = 22; 9 const int inf=9999999; 10 char mat[ maxn ][ maxn ]; 11
阅读全文
摘要:题意:小数化分数有限小数:小数点后面有几位就乘以 10^n 最后 分子则为乘积,分母则为1*10^n (记得约分)混无限循环小数:循环节+非循环节(’+‘表示连接起来)-非循环节=分子分母:循环节有几位(从左往右)就有几位9,非循环节有几位就有几位0比如:0.1(305)分子:1305-1分母:9990纯循环小数:设n=循环节的位数分子=10^n*(小数部分也就是循环节)分母=n位9例如:0.(3053)分子=3053分母=9999附代码View Code 1 #include<stdio.h> 2 #include<math.h> 3 #include<stri
阅读全文
摘要:简单View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 const int maxn = 105; 6 int mat[ maxn ][ maxn ]; 7 int x[4],y[4]; 8 int main(){ 9 int x1,y1,x2,y2;10 memset( mat,0,sizeof( mat ) );11 while( scanf("%d%d%d%d",&x1,&y
阅读全文
摘要:打素数表View Code 1 #include<stdio.h> 2 #include<string.h> 3 const int maxn = 10010; 4 int shu[ maxn ],prime[ maxn ]; 5 void get_prime( ){ 6 for( int i=1;i<maxn;i+=2 ) shu[ i ]=1; 7 for( int i=0;i<maxn;i+=2 ) shu[ i ]=0;//0 is stand for not prime 8 shu[ 1 ]=0; 9 shu[ 2 ]=1;10 for( i...
阅读全文
摘要:题意:求n个数中的某些数的和等于t,并输出dfs记录下已经输出过的,然后每次比较一下,这样就能避免重复View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<algorithm> 5 using namespace std; 6 const int maxn = 15; 7 const int maxm = 500005; 8 int num[ maxn ]; 9 int vis[ maxn ]; 10 int ans[ maxn ];
阅读全文
摘要:开始觉得是 最长不增序列。。。但是就那么随笔写了俩个for 就AC了。。。。。。估计数据弱吧。。。。View Code 1 #include<stdio.h> 2 const int maxn = 200005; 3 int a[ maxn ],vis[ maxn ]; 4 int main(){ 5 int n; 6 while( scanf("%d",&n)==1 ){ 7 for( int i=1;i<=n;i++ ){ 8 scanf("%d",&a[ i ]); 9 vis[ i ]=0;10 ...
阅读全文
摘要:题意:给定一些木棒询问是否能够组成正方形直接暴力 DFSView Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<algorithm> 5 using namespace std; 6 const int maxn = 24; 7 int a[ maxn ]; 8 int vis[ maxn ]; 9 int n ,flag;10 11 void dfs( int pos,int len,int LEN,int sum ){//12 if(
阅读全文
摘要:简单View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<algorithm> 5 using namespace std; 6 const int maxn = 1005; 7 struct node{ 8 char mm[ 24 ]; 9 int num;10 int ss;11 }a[ maxn ];12 int b[ 12 ];13 bool cmp( node a,node b ){14 if( a.ss!=b.ss ) re
阅读全文
摘要:View Code 1 #include<stdio.h> 2 #include<string.h> 3 const int inf = 9999999; 4 struct node{ 5 int s,e; 6 char m[ 24 ]; 7 }a[505]; 8 int main(){ 9 int t;10 scanf("%d",&t);11 while( t-- ){12 int num;13 char time[24];14 scanf("%d",&num);15 int ans1,...
阅读全文
摘要:题意:有a+b计算结果View Code 1 #include<stdio.h> 2 #include<string> 3 #include<stdlib.h> 4 int mp( char a[] ){ 5 if( strcmp(a,"zero")==0 ) 6 return 0; 7 if( strcmp(a,"one")==0 ) 8 return 1; 9 if( strcmp(a,"two")==0 )10 return 2;11 if( strcmp(a,"three"
阅读全文
摘要:题意:给定一张图,图中的每个数代表一种颜色的气球求:哪种颜色的气球不能在K次中被消灭( 每次只能消灭一行或者一列 )二分匹配:按照题意来分析 就是要寻找一种消灭方法 使得所有同种气球被消灭 这就符合了最小点覆盖的意义当所有的点(在这里也就是气球的行号和列号 ) 被覆盖,也就是所有的行号和列号被覆盖最小点覆盖=最大匹配View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<queue> 5 #include<math.h> 6
阅读全文
摘要:题意:模拟图书馆借书book用于记录 该书 被那个学生借走了pos 用于记录这本书被借走的同学放在了第几位.注意:每次还书 的时候要更新pos!!!!View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<queue> 5 #include<stdlib.h> 6 #include<algorithm> 7 using namespace std; 8 const int maxn = 100005; 9 const
阅读全文
摘要:水题~~题意:满足方程 a*x1*x1+b*x2*x2+c*x3*x3+d*x4*x4=0 的解的个数直接模拟三个for即可View Code 1 #include<stdio.h> 2 #include<math.h> 3 int main(){ 4 int a,b,c,d; 5 while( scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF ){ 6 int ans=0; 7 if(( a>0&&b>0&&c>0&&d>0
阅读全文
摘要:题意:三个瓶子,容量为s,n,m,且s装满饮料 s=m+n求至少倒多少下能使得某两个瓶子装着相同多的饮料。bfs 模拟View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<queue> 5 #include<algorithm> 6 using namespace std; 7 const int maxn = 105; 8 struct node{ 9 int s,n,m,t; 10 }; 11 int s,n,m; 12 i
阅读全文
摘要:题意:从一个4位数到另一个4位数 所需的步数bfsView Code 1 #include<stdio.h> 2 #include<string> 3 #include<stdlib.h> 4 #include<queue> 5 #include<algorithm> 6 #include<iostream> 7 #include<map> 8 using namespace std; 9 const int maxn = 10;10 char a[maxn],b[maxn];11 int vis[ 10000
阅读全文
摘要:两题基本相同都是关于转弯不能超过某个数,所以有些点可能重复走,所以要设time[][]数组来记录上次走过的时间!!!!记得初始化queue!!!HDU1175View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<queue> 5 #include<algorithm> 6 using namespace std; 7 const int dx[]={0,0,1,-1}; 8 const int dy[]={1,-1,0,0}
阅读全文
摘要:分别从s,e出发进行bfs注意讨论的部分即可。详见代码:View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<queue> 5 #include<map> 6 #include<algorithm> 7 using namespace std; 8 const int maxn = 8; 9 const int inf = 123456789; 10 struct node{ 11 int x,y; 12 };
阅读全文
摘要:题意:有上一状态到下一状态单向bfs就是每次只改变一个点的一个方向!!!( 参考。。。http://blog.csdn.net/cscj2010/article/details/7371482)View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<queue> 5 #include<algorithm> 6 using namespace std; 7 const int maxn = 8; 8 bool vis[ maxn
阅读全文
摘要:水~但是如果不找出公式的话,而用for(角度),这样会TLE。。。。View Code 1 #include<stdio.h> 2 #include<math.h> 3 #include<algorithm> 4 using namespace std; 5 const double pi=3.141592653; 6 int main(){ 7 double x,y,v; 8 while( scanf("%lf%lf%lf",&x,&y,&v)==3,x+y+v ){ 9 double ans=0;10 /*11
阅读全文
摘要:注意:先处理出起点的整个body,并存储在form中,然后再建个新的图flag,再就是普通的bfs了。。。。。参考:http://blog.csdn.net/ice_crazy/article/details/7594362View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<queue> 5 #include<algorithm> 6 using namespace std; 7 const int maxn = 105;
阅读全文
摘要:题意:给定一个凸多边形和一条直线求这个多边形被切割后的面积对于代码中的“d1=dblcmp(s1=cross( p.node[i],s,e ));//跨立 d2=dblcmp(s2=cross( p.node[i+1],s,e ));//跨立”不是很理解。。。求指教View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<math.h> 5 #include<algorithm> 6 using namespace std; 7
阅读全文
摘要:http://blog.csdn.net/xxx0624赶脚这里有点冷清。。。http://blog.csdn.net/xxx0624
阅读全文
摘要:水~View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<algorithm> 5 #include<map> 6 using namespace std; 7 int in[ 10 ],sum[ 8 ]; 8 /* 9 BCG 1 2 3//(12)(34)(68)10 BGC 1 3 2//(12)(35)(67)11 12 CBG 2 1 3//(01)(45)(68)13 CGB 2 3 1//(01)(35)(78
阅读全文
摘要:题意:卡特兰数+n!java!View Code 1 import java.math.BigInteger; 2 import java.util.*; 3 4 public class HDU1131{ 5 public static void main( String args[] ){ 6 int n; 7 Scanner cin=new Scanner(System.in); 8 BigInteger h[]=new BigInteger[ 105 ]; 9 h[ 0 ]=h[ 1 ]=BigInteger....
阅读全文
摘要:题意:从n个男孩中挑出k个,每个人有两个属性u,v怎样挑选能得到最大的value定义状态:dp[ i ][ j ]:从前i个中挑出j个得到的最大value对于第i个,若选择,dp[i][j]=dp[i-1][j-1]+a[i].u-a[i].v*(j-1) 若不选择,dp[i][j]=dp[i-1][j]+0;View Code 1 #include<algorithm> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<stdio.h> 5 using namespace std; 6 c
阅读全文
摘要:推理一个数字含有一个5就能有一个0,但是在计数的时候要除去这个5,再去进行新的计算。View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 typedef __int64 int64; 5 int main(){ 6 int t; 7 scanf("%d",&t); 8 while( t-- ){ 9 int64 n;10 scanf("%I64d",&n);11 int64 ans=0;12 int64 now=5
阅读全文
摘要:题意:给定一个字典,给定一些询问,对于每个询问,在字典中找出与之匹配的单词(匹配的规则:两者的排序之后结果是相同的)View Code 1 #include<stdio.h> 2 #include<string> 3 #include<map> 4 #include<iostream> 5 #include<algorithm> 6 using namespace std; 7 map<string,string>mp; 8 string my_end="XXXXXX"; 9 int main(){10
阅读全文
摘要:题意:求能否把一个矩形放入另一个矩形中。只有两种情况 见代码View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<math.h> 5 #include<algorithm> 6 using namespace std; 7 const double pi=acos(-1.0); 8 int main(){ 9 int t;10 //printf("%lf\n",pi);11 scanf("%d&
阅读全文
摘要:三角形重心:(x1+x2+x3)/3,(y1+y2+y3)/3 这是特殊情况,各点的质量相等多边形 x=( sigma )( xi*mi )/sumArea y=( sigma )( yi*mi )/sumArea先把多边形变成多个三角形,分别求出mi(有点像面缩点),然后得到新的点的坐标。。。View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<math.h> 5 const int maxn = 1000005; 6 struct
阅读全文
摘要:题意:一家店从早上8点开始营业,一共有3种座位(2人座,4人座,6人座),每次来一批客人 吃饭时间30分钟,下一批没座的客人最多等30分钟模拟!关键在于存储每种座位什么时候是空的,或者说什么时候客人会离开,可以用队列来存储!(题目给定的就是按时间顺序的)View Code 1 #include<stdio.h> 2 #include<algorithm> 3 #include<stdlib.h> 4 #include<queue> 5 using namespace std; 6 const int maxn = 1005; 7 struct n
阅读全文
摘要:View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #include<stdlib.h> 5 using namespace std; 6 const int maxn = 205; 7 char a[ maxn ],b[ maxn ],s[ maxn ]; 8 char fi[ 505 ][ maxn ]; 9 char tmp[ maxn ]; 10 11 void a_b_add( ){ 12 int i,t,la,lb; 13 i=0; 14
阅读全文
摘要:打表找范围!View Code 1 #include<stdio.h> 2 int fac[ 12 ]; 3 void init(){ 4 fac[ 0 ]=1; 5 fac[ 1 ]=1; 6 fac[ 2 ]=2; 7 for( int i=3;i<=9;i++ ){ 8 fac[ i ]=fac[ i-1 ]*i; 9 }10 }11 void init2(){12 init();13 printf("1\n2\n");14 for( int i=145;i<=50000;i++ ){15 ...
阅读全文
摘要:题意:给定n个点,n-1条边,每两个点之间的路独一无二LCAView Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 const int maxn = 40005; 5 int head[ maxn ],cnt; 6 struct node{ 7 int u,val,next; 8 }edge[ maxn*2 ]; 9 int ace[ maxn ],fa[ maxn ],dis[ maxn ],deep[ maxn ];10 void init(){11 cnt=0;
阅读全文
摘要:详见代码View Code 1 //设n可以表示成i个连续整数之和,首项为a, 2 //则n=a+(a+1)+……(a+i-1)=i*a+(1+2+……+(i-1))=i*a+(i*(i-1)/2)-->a=(n-(i*(i-1)/2))/i 3 //枚举i,使得a右边能整除,ans++ 4 #include<stdio.h> 5 int main(){ 6 int n; 7 while( scanf("%d",&n)!=-1 ){ 8 int sum=0,i; 9 for( i=1;i<=n;i++ ){10 sum...
阅读全文
摘要:题意:给定一张图,包括n个城市,m条路径,q个询问( 图中没有环 )。bfs会超时!!LCA问题:询问 a,b 之间的最短距离。因为图中不可能出现环,所以两点之间有且仅有一条路,或者没有。所以先预处理出a,b的最近公共祖先,和他们各自的距离。比如a,b的最近公共祖先为father(简易图)aa----father----b | | a1 | aans=dis[ a ]+dis[ b ]-dis[ father ]*2;dfs中的fa==0判断是因为这是无向图。。。谨记。。。这只是求距离,对父子关系要求不明显View Code 1 #incl...
阅读全文
摘要:2-sat初次接触2-sat。首先对于2-sat问题,可简化为:现在有N个党派,每个党派只有2名人员,从2者挑出一个,且某两个党派挑出来的人可能存在矛盾,这时不能同时选择他们。(引用对称性解决2-sat的ppt)例如:(x1,x2),(y1,y2)为两个不同党派的人。若两两之间都没有矛盾,则do nothing若 x1-y1有矛盾,则他们不能同时被选择,所以 (x1,y2)是必选的,或者(x2,y1)是必选的。然后根据这条规律,tarjan+缩点,得到新的一张图,这张图没有环,若某个“点”中存在(x1,x2)(即:某个党派2个人同时出现在这个“点”中),这是就不能达到目标。反之成立。View
阅读全文
摘要:例如:6 a b a b a b ‘\0’下标i: 0 1 2 3 4 5 6Next: -1 0 0 1 2 3 4dp: 0 1 1 2 2 3 3dp[ 1 ]=1表示目前:‘a’出现一次dp[ 2 ]=1:同上:“ab”dp[ 3 ]=2表示“abab”一次,“ab”一次。。。dp[ 6 ]=3表示首字母‘a’在整个的出现次数KMP够强大!!!!!View Code 1 #include<stdio.h> 2 #include<string.h> 3 const int maxn = 200005; 4 const int mod= 10007; 5 char
阅读全文
摘要:题意:一个字符串在另一个字符串中出现的次数View Code 1 #include<stdio.h> 2 #include<string.h> 3 const int maxn = 10005; 4 const int maxm= 1000005; 5 int lena,lenb; 6 char a[ maxm ],b[ maxn ]; 7 int next[ maxn ]; 8 int ans; 9 void getNext(){10 int j,k;11 j=0,k=-1;12 next[0]=-1;13 while( j<lenb ){14 ...
阅读全文
摘要:floyd新应用!!!!View Code 1 #include 2 const int maxn = 101; 3 const int inf = 9999999; 4 int n,m; 5 int dis[ maxn ][ maxn ],mat[ maxn ][ maxn ]; 6 7 void floyd(){ 8 int ans=inf; 9 for( int i=1;i( dis[i][j]+mat[i][k]+mat[k][j] ) )17 ans=dis[i][j]+mat[i][k]+mat[k][j];18 ...
阅读全文
摘要:View Code 1 #include<stdio.h> 2 #include<stack> 3 #include<string.h> 4 #include<stdlib.h> 5 #include<algorithm> 6 using namespace std; 7 const int maxn = 10005; 8 const int maxm = 100005; 9 struct node{10 int u,next;11 }edge[ maxm ];12 int head[ maxn ],cnt;13 int vis[ m
阅读全文
摘要:因为可以通过其他人来通知他们认识的人,所以这幅图可以用强连通分量变成一个 缩点的图,所有相互强连通分支变成一个缩点,求的所有缩点中入度为0的缩点即为 所求的需要通知的最小人数。然后再枚举所有人所在的缩点是否入度为0,是的话更 新该缩点所需的最小费用即可View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<stack> 5 #include<algorithm> 6 using namespace std; 7 const i
阅读全文
摘要:ANS=0;if x*x+x*x==n ANS+=4;//( x,x) (-x,-x) (-x,x) (x,-x)if x*x+0*0==n ANS+=4;//(x,0) (0,x) (-x,0) (0,-x)if a*a+b*b==n ANS+=8;View Code 1 #include<stdio.h> 2 #include<math.h> 3 #include<string.h> 4 const int maxn = 10005; 5 int a[ maxn ]; 6 int main(){ 7 memset( a,0,sizeof(a)); 8 a
阅读全文
摘要:题意:汽车有两个标量:里程,油量。给定一些数,若不加油进去,里程逐渐增大,油量减少;但若加油了,油量则会突然增大,这组数据应该放弃不用。然后求出平均速度,再用最后油量求出能走多远。View Code 1 #include<stdio.h> 2 #include<string.h> 3 const int maxn = 1005; 4 struct node{ 5 double dis,fuel; 6 }a[ maxn ]; 7 int main(){ 8 int n=0; 9 double aa,bb;10 while( scanf("%lf%lf"
阅读全文
摘要:View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<queue> 5 using namespace std; 6 const int maxn = 21; 7 const int inf = INT_MAX; 8 int r[ maxn ],c[ maxn ],sd[ maxn ],md[ maxn ];//sd=r+c,md=r-c+n-1; 9 int ans,n;10 void init(){11 memset( r,0,si
阅读全文
摘要:题意:N皇后方法:BFS+打表View Code 1 #include<stdio.h> 2 #include<string.h> 3 const int maxn = 21; 4 int sd[ maxn*2 ],c[ maxn ],md[ maxn*2 ]; 5 struct node{ 6 int r,c,flag; 7 }p,stack[ maxn*maxn ]; 8 int ans,n; 9 10 void bfs(){11 int top=-1;12 for( int i=n-1;i>=0;i-- ){13 stack[ ++top ].r...
阅读全文
摘要:1. 二分图的最小顶点覆盖(例hdu1150,poj3041) 在二分图中求最少的点,让每条边都至少和其中的一个点关联,这就是二分图的“最小顶点覆盖”。换句话说就是对于这也最小顶点集,原图中的每条边都至少有一个点在这个点集里面。 结论: 二分图的最小顶点覆盖数 = 二分图的最大匹配数2. DAG图的最小路径覆盖 (例hdu1151)用尽量少的不相交简单路径覆盖有向无环图(DAG)G的所有顶点,这就是DAG图的最小路径覆盖问题。结论:DAG图的最小路径覆盖数= 节点数(n)- 最大匹配数(m)3. 二分图的最大独立集(例hdu1068)最大独立集是指求一个二分图中最大的一个点集,该点集内的点互不
阅读全文
摘要:题意:给定n个点,m条无向边。首先判断能否得到一个二分图(BFS),如果可以,则进行二分图匹配。View Code 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 #include<queue> 5 #include<algorithm> 6 using namespace std; 7 const int maxn = 205; 8 const int maxm = 205*205; 9 struct node{10 int u,val,next;11
阅读全文
摘要:题意:8600的手机每天消费1元,每消费K元就可以获赠1元,一开始8600有M元,问最多可以用多少天?输入包括多个测试实例.每个测试实例包括2个整数M, k,(2 <= k <= M <= 1000).M = 0, k = 0代表输入结束.注意:每次消费的时候,都应该消费k的整数倍。View Code 1 #include<stdio.h> 2 int main(){ 3 int n,k; 4 while( scanf("%d%d",&n,&k)==2 && (n+k) ){ 5 int ans=0; 6 whi
阅读全文