摘要:这次华中赛区打铁了。。。 哥伤心啊。。 伤心。。 人生第一次打铁。。。 其实哥觉得自己能去拿个铜的,因为毕竟有50个能拿铜啊。。。。。。。。。。。。。。。。。。这么大的几率。。 哥竟然还挂了。。。。 话说前一天的热身赛还不错。。。 rank17 让我挺有信心的,现在想来可能是中了别人的计谋啊。。。 别人故意放水。。让我们放松。或者别人不屑于跟我们比。。 伤心。。 比赛终于上场了。。。 开始小杨找了A题一道几何题给我。。 然后我就看几何题。。 然后小杨看到了一道水题。。 J题。。 一道很简单的字符串处理。。。 我觉得我能1A的。。还是给小杨做吧。。。。 给小杨了以后他没能1A。。我就在旁边看着他
阅读全文
摘要:外挂1inline bool read(int &num) { char in;bool IsN=false; in=getchar(); if(in==EOF) return false; while(in!='-'&&(in<'0'||in>'9')) in=getchar(); if(in=='-'){ IsN=true;num=0;} else num=in-'0'; while(in=getchar(),in>='0'&&in<
阅读全文
摘要:以前都是直接树状数组裸奔,昨天一个题数据量好大,过不了,没办法只能学离散化,今天A了第一个离散化的题#include<stdio.h>#include<string.h>#include<stdlib.h>#define Max 500005long long s,a[Max];int n,max;struct e{ int num,f;}N[Max];int cmp( const void *a,const void *b ){ return ( ( e * )a ) -> num - ( ( e * )b ) -> num;}inline i
阅读全文
摘要:题意:把一个数拆成素数,从小到大排列。如果把素数全部存起来大概快一半的样子#include<stdio.h>#include<string.h>#define Max 65540int n,prime[Max+5],num[Max],c = 0;void DFS( int x ){ if( x == 0 ) return ; for( int i = 0; i < c; ++i ) { if( x % num[i] == 0 ) { printf( x == n?"%d":"*%d",num[i] ); DFS( x / n
阅读全文
摘要:这题用素数筛选法。。。。 不过数组要开大点。。。 否则会挂掉去#include<stdio.h>#include<string.h>#define max 1 << 15 + 1int num[max + 5],n;void fun( ){ memset( num,0,sizeof( num ) ); num[0] = num[1] = 1; for( int i = 2; i <= max / 2; ++i ) if( !num[i] ) for( int j = i + i; j <= max; j += i ) num[j] = 1;}in
阅读全文
摘要:昨天去了湘大比赛,早就有不祥预感,果然,居然昨天早上六点半就起来,然后在车上晕了一个多小时才到湘大,开赛后第一题没能一A,审题不够仔细啊。。。 要是多看看题,也许就直接水了,后来转战第一题,超水题,直接水过,前两题都比较快,不过3 4 题想了好久啊。第3题想了一下就是求最大公约数,水了,第四题,本来可以直接水过的,那样要节省好多时间,说不定就二等奖了。。。。。。。。。。。。。。呀。。。。。。。。。。。。。。。。。。。。。。。 结果2^i 我写成2 * i了,最后吨姐发现是pow( 2,i ),这次吨姐起了不小的作用啊,要不是吨姐,我们说不定就打铁了,还有,唐聪和吨姐两人读题读得很好啊。。。 不
阅读全文
摘要:这题一看是水,二看还是水,最后一做就挂了,归咎于数组越界啊。我却全然不知。。。。 //62MS水过#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<ctype.h>#define Max 1000005int num[Max + 1];inline int cal( int i )//用内联快很多{ int sum = i; while( i ) { sum += i % 10; i /= 10; } return sum;}vo
阅读全文
摘要:这题想了想用母函数应该也可以做,不过得考虑一个细节,就是加起来的总和是否为奇数,我找了好久一直没找出错误,原来是没考虑奇数。。 fuck 这种问题我怎么能不考虑奇数呢。。。。。 啊 啊 啊啊 啊啊啊 啊啊啊啊 啊 啊啊啊啊好吧。。 上代码。。 二进制优化。。。 如果能拼出他们总和的平均值。那么在他们的平均值背包里能装下平均值。。#include<stdio.h>#include<string.h>int num[7],dp[200005],ave;inline int max( int a,int b ){ return a > b ? a : b; }void
阅读全文
摘要:其实母函数基本都可以用多重背包来解,我在做母函数时,我的代码500多MS有的甚至过不了,而cadl神的是0MS,就倍感惊讶啊,我的超时,为神马别人的那么少啊,一问原来是用背包做的,这里来讲一讲母函数用背包做的一点小理解吧,以HDU 1284为例,dp[j]代表着钱为j时的选法,当循环到第i次时,(即前面的coin[1,2....i-1]已经选完了 )对于j有两种选法,一:不选coin[i],那么它的选法就是原来不选coin[i]的选法dp[j],选coin[i]的选法有多少种呢???? 不就是dp[j-coin[i]] ( 为神马是这样呢?因为你如果在j那里选了coin[i],那么他选coin
阅读全文
摘要:多重背包问题:有N种物品和容量为V的背包,若第i种物品,容量为v[i],价值为w[i],共有n[i]件。怎样装才能使背包内的物品总价值最大?网上关于“多重背包”的资料倒是不少,但是关于怎么实现O(N*V)算法的资料,真得好少呀,关于“单调队列”那部分算法,又没说明得很清楚,看了几遍没看懂原理,只好自己动脑去想怎么实现O(N*V)算法。若用F[i][j]表示对容量为j的背包,处理完前i种物品后,背包内物品可达到的最大总价值,并记m[i] = min(n[i], j / v[i])。放入背包的第i种物品的数目可以是:0、1、2……,可得:F[i][j] = max { F[i - 1] [j –
阅读全文
摘要:这题看着我第一感觉是母函数,但是据说母函数会TLE,就果断多重背包了,而这里用多重背包做,明显不能直接把dp[n]输出来,那样结果是错的,那怎么才能找到种类呢。if( dp[i] ) ++c;??????这样行吗???? 不行,这是后要想到dp[i]的含义,dp[i]代表着在重量i时能找到的最大价值,而这里的重量和价值都是钱,所以就有很方便的一个地方了,dp[i]中最多能装下i的话那么肯定i能够选到,所以就有判断条件了if( dp[i] == i ) ++c;直接上代码吧#include<stdio.h>#include<string.h>//#define max(
阅读全文
摘要:下面是以简短代码,但是我觉得还是标准版的好#include<stdio.h>#include<string.h>int n,m,v[105],w[105],num[105],dp[105],ma;int max( int a,int b ){ return a > b ? a : b;}int main( ){ int t; scanf( "%d",&t ); while( t-- ) { ma = 0; memset( dp,0,sizeof( dp ) ); scanf( "%d%d",&n,&m
阅读全文
摘要:这题是我第一次写多重背包,1RE,1WA,#include<stdio.h>#include<string.h>int n,v[55],num[55],dp[250000],sum,all;int max( int a,int b ){ return a > b ? a : b;}int main( ){ while( scanf( "%d",&n ),n > 0 ) { sum = 0; for( int i = 0; i < n; ++i ) scanf( "%d%d",&v[i],&
阅读全文
摘要:那天比赛时还有一题,分糖果。当时看了没神马头绪,就没看了。这是地址http://218.75.208.59:8084/acmhome/problemdetail.do?&method=showdetail&id=1061分糖果时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte总提交:14 测试通过:11描述肖恩和帕特里克是兄弟,他们从他们的父母那里得到了很多糖果。每一块糖具有一个的正整数的价值,孩子们希望分他们得到的糖果。首先,肖恩将这些糖果分成两堆,并选择一堆给帕特里克。然后,帕特里克将尝试计算每堆的价值,其中每堆的价值是在那堆的糖果价
阅读全文
摘要:这是我们学校本届的校赛题目,链接:http://218.75.208.59:8084/acmhome/problemdetail.do?&method=showdetail&id=1060题目描述:我素故我在时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte总提交:20 测试通过:11描述有这样一种素数叫纯素数(YY出来的名字),当它是一个多位数的时候,你把它的末位去掉之后余下的数依然是一个素数。比如说2393,2393 本身是一个素数,它的末位去掉之后,余下的是239。239 是一个素数,它的末位去掉之后,余下的是23 。23是一个素数
阅读全文
摘要:acm本文由swellspirit贡献ACM• I can accept failure. but I can't accept not trying.Life is often compared to a marathon, but I think it is more like being asprinter; long stretches of hard work punctuated by brief moments in which weare given the opportunity to perform at our best. If someone gets the
阅读全文
摘要:这次校赛完了。感觉还可以。7道题。 不过那F真的很遗憾,我打表都打出来了。用的筛选法。不过竟然输出格式错误。一直wa。最后一个小时竟然没做出一题。。 好吧。。 没能八题 我悲剧了。。 昨天比完后今天真感觉很累。。 睡觉吧。。。。 下周的湘潭赛继续奋斗啊。。这周把背包九讲看了。把背包AK吧。。 恩。。下周去接受湘潭的虐待。。 我也要像小雨一样做DP,成为DP之神。。 小雨这次上海赛拿奖了。银奖。。 好牛逼啊 。。 神马时候我也能在区域赛上拿个奖啊。。。期望中。睡觉去 。。。。
阅读全文
摘要:这题题意大致是一个蓄钱小猪,空质量w1,装了钱的质量w2,然后给出各种钱的价值及重量,问着个钱罐至少要存多少钱这题是完全背包入门的一经典啊,现在我还不是太理解完全背包。下面说说我的理解吧。完全背包是要把每种都尽量往里面放,每种都放到使总值最大,(为神马这样放就能把每种放到最大呢?客观请继续看)最后看所有种类全部放进去,并且放到使总值最大,好吧。至于为神马从后面往前面放就是0-1背包呢,即只能放一个,并且是依靠前面的呢,因为如果从w[i]-W,在0-1背包中,当W-w[i]>w[i]时,就有可能在dp[W]放w[i]时就已经把w[i]放进去了,即完全背包,这样就重复放了w[i],这显然与0
阅读全文
摘要:这个题开始一看是并查集,后来改了很久,怎么改也改不过,只得翻大牛的代码,原来大牛们都是这样写的,左边的为胜利者,有边的为失败者,如果左边的胜利者只有一个没在右边出现过,那么这个就是产生的冠军,否则产生不了、#include<stdio.h>#include<string.h>int set[1005],n,f,c,num[1005];char ch[1005][20];int search( char str[] ){ for( int i = 1; i < c; ++i ) if( !strcmp( str,ch[i] ) ) return i; strcpy(
阅读全文
摘要:一个多边形公式s = ( x1*y2-x2*y1 ) + ( x2*y3 - x3*y2 )……( xn-1*yn - xn*yn-1 ) + ( xn*y0 - x0*yn );一个公式就OK了#include<stdio.h>int n;double x[105],y[105],sum ;int main( ){ while( scanf( "%d",&n ),n ) { sum = 0; for( int i = 0 ; i < n; ++i ) { scanf( "%lf%lf",&x[i],&y[i]
阅读全文
摘要:这题开始我拿了,不知怎么下手,但幸好这题是在背包这里,提示了我,肯定能用背包解,但显然概率不能作为一维数组的下标,所以只能找价值来当一维数组下标,而要不失败,即全部成功,求全部成功的概率就行了。其实仔细想想0-1背包的二维中两个下标是对称的。还有0要初始化为1,因为如果神马都不抢成功率为1#include<stdio.h>#include<string.h>double dp[10005],W,w[10005];int n,v[10005],ma;double max( double a,double b ){ return a > b ? a : b;}void
阅读全文
摘要:#include<stdio.h>int main( ){ int n,sum,a,b; while( scanf( "%d",&n ),n ) { sum = 0; a = 0; for( int i = 0; i < n; ++i ) { scanf( "%d",&b ); sum += 5; if( b > a ) sum += ( b - a ) * 6; if( b < a ) sum += ( a - b ) * 4; a = b; } printf( "%d\n",sum )
阅读全文
摘要:水题 。。 直接把所有可能枚举。。 最后找出没有可能的,即系数为0 的最小数#include<stdio.h>#include<string.h>int s[4] = {0,1,2,5},m1[100000],m2[100000],num[4],max;void gf( ){ memset( m1,0,sizeof( m1 ) ); memset( m2,0,sizeof( m1 ) ); for( int i = 0; i <= num[1]; ++i ) m1[i] = 1; for( int i = 2; i <= 3; ++i ) { for( in
阅读全文
摘要:好吧。。 这题是母函数的同一类型题。。。。。暴力也可以过#include<stdio.h>int sq[18],m1[305],m2[305];void chart( ){ for( int i = 0; i < 305; ++i ) m1[i] = m2[i] = 0; for( int i = 0; i < 18; ++i ) sq[i] = i * i; m1[ 0 ] = 1; for( int i = 1; i <= 17; ++i ) { for( int j = 0; j <= 300; ++j ) for( int k = 0; ( j +
阅读全文
摘要:这题是母函数的一基本题。跟2079差不多http://www.cnblogs.com/Lvsi/archive/2011/05/11/2043707.html不过这里相邻括号递增的幂是依次递增的,不过这次我又犯了一个错误,很严重的,在写k的时候竟然写成k*i<= map[i]oh~ so bad ... 以后谨记#include<stdio.h>int map[28],m1[100],m2[100],n;void gf( ){ m1[0] = 1; for( int i = 1; i <= 26; ++i ) { for( int j = 0; j <= 50;
阅读全文
摘要:今天做这题才知道原来母函数的原型不是从第二个括号开始,那不过是优化而已,除了1^n,2^n那种类型可以从2开始外其他都要从1开始。好了,上代码吧。#include<stdio.h>int n,k,m1[450],m2[450],t,a,b;int num[15],sc[15];void gf( ){ for( int i = 0; i <= num[1];i++ ) m1[i*sc[1]] = 1; for( int i = 2; i <= k;++i ) { for( int j = 0; j <= n; ++j ) for( int l = 0; l <
阅读全文
摘要:这个要注意把缩写的最后一个字符串置为0#include<stdio.h>#include<string.h>#include<ctype.h>char str[1000],s[1000];int main( ){ int t; scanf( "%d%*c",&t ); while( t-- ) { gets( str ); int i = 0,c = 0; while( str[i] ) { if( !isalpha( str[i] ) ) { ++i; continue; } if( str[i] > 'Z'
阅读全文
摘要:水题 。。 就是从给出的字符串中找出出现次数最频繁的那一个。。。直接暴力。。 给没个字符串一个编号。。#include<stdio.h>#include<string.h>int n,c,des[1005];char ch[1005][20];int search( char str[] ){ for( int i = 0; i < c; ++i ) if( !strcmp( ch[i],str ) ) return i; return c++;}int main( ){ while( scanf( "%d",&n ),n ) { c
阅读全文
摘要:找关系。。。。1/1 1/2 1/31/2 1/1 1/21/3 1/2 1/1出了1以外有这样的规律1/2有(3-1)*2个1/2有 ( 3 - 2 ) * 2个那么可以猜想结果为sum = n * 1 / 1 + ( n - 1 ) * 2 * 1 / 2 + ( n - 2 ) *2*1/3+.......+(n-i+1)*2*1/i;#include<stdio.h>#include<stdlib.h>#include<math.h>int n;double cal( ){ double sum = 0; sum = n; for( int i =
阅读全文
摘要:这题当时比赛的时候想到是深搜,但当时深搜做得不多,没做得出,后来看以大牛代码才会写,主要是判断条件写得好。#include<stdio.h>#include<string.h>char str[20];int l,cnt;void DFS( int k,int num ){ if( num < 0 )//右括号不能多于左括号 return ; if( k == l ) { if( num == 0 )//当左边跟右边的括号相等且刚好到最后一个,就是一中符合条件的可能 ++cnt; return; } if( str[k] == '(' ) DFS(
阅读全文
摘要:这题忒easy了。。。。直接搜吧。。 都不用回溯的#include<stdio.h>#include<string.h>int map[25][25],des[25][25],n,m,sx,sy;void DFS( int y,int x ){ if( map[y][x] == '#'||des[y][x]||y > n || x > m ) return ; des[y][x] = 1; DFS( y - 1,x ); DFS( y + 1,x ); DFS( y,x - 1 ); DFS( y,x + 1 ); }int main( ){
阅读全文
摘要:这题如果是神搜的一基本题目,每次都向四个方向神搜就行了,不过要考虑剪枝,要用奇偶剪枝,否则TLE,还有用一个标记f,标记当前是否已找到来剪枝。如果还想减少时间就可以在输入时做一个标记,看当前有多少个可以走的点,如果可以走的点小于总时间t那么肯定是NO,这样要减少很多饿。。。。#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>int n,m,t,sx,sy,ex,ey,f;int maz[10][10],des[10][10];void DFS( int y,i
阅读全文
摘要:这个就是一深搜,不解释,还有,测试数据太弱了。#include<stdio.h>#include<string.h>int map[23][4],des[23],num[23],f,n;void DFS( int p,int nu ){ if( nu == 20 && ( map[p][1] == n || map[p][2] == n || map[p][3] == n ) ) { printf( "%d: ",++f ); for( int i = 0; i < 20; ++i ) printf( "%d &quo
阅读全文
摘要:这题跟其实是以DFS经典题,如果按一般思路一行一行来选,那样会灰常暴力,但是仔细思考可得这题可简化思路,因为没行只能放一个,所以只要搜索N个就行了。。。。。 而对于每一个只要判断跟前面是否有冲突就行了( DP 思想,分步来 )。#include<stdio.h>#include<string.h>int n,map[20],des[20],cnt,num[11];void DFS( int num ){ if( num == n + 1 ) { ++cnt; return ; } for( int i = 1; i <= n; ++i ) { if( !des[i
阅读全文
摘要:JAVA 水过import java.io.*;import java.util.*;import java.math.*;public class aa{ public static void main( String[] args ) { BigDecimal a,b; int c; Scanner cin = new Scanner(System.in); while( cin.hasNext() ) { a = cin.nextBigDecimal(); b = BigDecimal.valueOf(1); c = cin.nextInt(); for( int i = 0; i &l
阅读全文
摘要:题目描述:给你两个n进制数a和b。以n进制的形式输出a % b。解题报告:String st = Integer.toString(num, base); // 把num当做10进制的数转成base进制的st(base <= 35).int num = Integer.parseInt(st, base); // 把st当做base进制,转成10进制的int(parseInt有两个参数,第一个为要转的字符串,第二个为说明是什么进制).BigInter m = new BigInteger(st, base); // st是字符串,base是st的进制.1.如果要将一个大数以2进制形式读入
阅读全文
摘要:JAVA水过import java.io.*;import java.util.*;import java.math.*;public class aa{ public static void main( String[] args ) { BigInteger f[] = new BigInteger[1005]; f[1] = BigInteger.valueOf(1); f[2] = BigInteger.valueOf(1); for( int i = 3; i < 1005; ++i ) f[i] = f[i-1].add(f[i-2]); Scanner cin = new
阅读全文
摘要:java 水过import java.io.*;import java.util.*;import java.math.BigDecimal;public class aa{ public static void main( String args[] ) { BigDecimal a,b; Scanner in = new Scanner ( System.in ); //int t = in.nextInt(); while( in.hasNext() ) { a = in.nextBigDecimal();b = in.nextBigDecimal(); BigDecimal c = a
阅读全文
摘要:其实这题是一DFS的简单题,但是题目意思,是在让人蛋痛啊!这题就是解决一个问题后,解决下一个问题的时间一定要比解决这题的多或者等于这题。。。。。但那英文是在太难看;第1个是第0个,时间为0,然后解决下一个。代码如下#include<stdio.h>#include<string.h>int n,des[20],max;int num[20][20],N[20];void DFS( int p,int val,int nu ){ int f = 0; for( int i = 1; i <= n; ++i ) { if( !des[i] && ( n
阅读全文
摘要:最近学习效率好低额 ... 可能是做题做多了吧... 该休息了
阅读全文
摘要:这题是以多重背包题..... 不过还不会多重... 只会简单的... 这里用DFS做就行了..... 不过这里如果不把当前位置传下去就会超时的噢... 我开始一直TLE 后来把当前状态传下去就A了15MS#include<stdio.h>int V[25],W[25];int des[25],n,k,we,max,dp[25][25];int inf = 0x7fffffff;void DFS( int p,int num,int val,int wei )//p不可少,否则超时.... 悲剧额....{//以后做这种深搜的一定先考虑要不要传递当前状态.. 以此来减少深搜时间 if
阅读全文
摘要:一纯水题..... 直接深搜并记忆化加标记#include<stdio.h>#include<stdlib.h>char map[1005][1005];int des[1005][1005],m,n,s,f1,f2,inf = 0x7fffffff,dep[1005][1005],s1,s2,s3;void DFS( int y,int x,int step ){ if( des[y][x] )//若遇到回路 { f2 = 1; s2 = step; s3 = dep[y][x]; return ; } if( f1 || map[y][x] < 0 )//若遇
阅读全文
摘要:这里指的java速成,只限于java语法,包括输入输出,运算处理,字符串和高精度的处理,进制之间的转换等,能解决OJ上的一些高精度题目。1. 输入:格式为:Scanner cin = new Scanner (new BufferedInputStream(System.in));例程:import java.io.*;import java.math.*;import java.util.*;import java.text.*;public class Main{ public static void main(String[] args) { Scanner cin = new Sca.
阅读全文
摘要:从昨天到今天,学习了卡了我很久的错排,而这两天小错误犯了很多,导致我卡了很久,不然应该可以很轻松的解决,不过我觉得这是件好事,因为现在卡总比在赛场上卡好.........错排公式有两个( 1 ) n! / 2! - n!/3! + n!/4!-.......+( -1 ) ^ n * n! / n!;递推来........( 2 )f( n ) = ( f( n - 1 ) + f( n - 2 ) ) * ( n - 1 ) ,f( 1 ) = 0,f( 2 ) = 1;DP来........我开始水这两个的时候都是用的double型一直不能水啊 .. 知道后面用了longlong行才能过.
阅读全文
摘要:这题跟hdu 2049 差不多,那个是从N个中选M个,这个是从N个从选1,2,3.......N/2个,错排与组合.....#include<stdio.h>long long num[28];void chart( ){ num[0] = 1; num[1] = 0; num[2] = 1; for( int i = 3; i < 28; ++i ) num[i] = ( i - 1 )*( num[i-1] + num[i-2] ); }long long f( int n,int k ){ double sum = 1; for( int i = n,j = 1; j
阅读全文
摘要:一个错排公式直接解决 水过#include<stdio.h>long long num[25];void chart( ){ num[1] = 0; num[2] = 1; for( int i = 3; i < 25; ++i ) num[i] = ( num[i-1] + num[i-2] ) * ( i - 1 ); }int main( ){ chart( ); int n; while( scanf( "%d",&n ) != EOF ) printf( "%I64d\n",num[n] ); return 0;}
阅读全文
摘要:#include<stdio.h>long long num[25],N[25];int main( ){ num[1] = 0; num[2] = 1; N[1] = 1; N[2] = 2; N[0] = 1; for( int i = 3; i < 25; ++i ) num[i] = ( num[i-1] + num[i-2] )*( i - 1 ),N[i] = i * N[i-1]; int t,n,m; scanf( "%d",&t ); while( t-- ) { scanf( "%d%d",&n,&a
阅读全文
摘要:这题我看了好几次,因为没学过错排,一直不敢做,今天看了下错排,可以用错排的公式做,但一神牛告诉我,可以DP,DP公式f( n ) = ( f( n - 1 ) + f( n -2 ) ) * ( n - 1 );#include<stdio.h>double num[25],N[25];void chart( ){ num[1] = 0; num[2] = 1; N[1] = 1; N[2] = 2; for( int i = 3; i < 25; ++i )//num[i]是错排 num[i] += ( num[i-1] + num[i-2] ) * ( i - 1 ),N
阅读全文
摘要:这题深受北大那题影响啊,这是链接http://www.cnblogs.com/Lvsi/archive/2011/04/10/2011484.html这题要注意happy的顺序不能变,所以要最先产生h然后a然后p,p,y,给每个字母都对应一个数组的数,要产生a时必须有h,要产生p时必须有a,要产生happy时,必须有一个h,一个a,两个p,一个y;而且要保证所有的happy都没颠倒次序,所以每一个字母的个数不能超过前面那个字母的个数( 例如hayppahppy,这种只有一个 )#include<stdio.h>#include<string.h>int n,num[5]
阅读全文
摘要:#include<stdio.h>long long num[25];void chart( ){ num[0] = 0; num[1] = 1; num[2] = 2; for( int i = 3; i < 25; ++i ) num[i ] = num[i-1] + num[i-2]; }int main( ){ chart( ); int t,n; scanf( "%d",&t ); while( t-- ) { scanf( "%d",&n ); printf( "%I64d\n",num[
阅读全文
摘要:这题要用到筛选法的思想,否则直接TLE,这题我很郁闷,原以为这题用这种方法肯定要超时的,就一直不敢用,没想到水了.郁闷#include<stdio.h>#include<string.h>int n,num[40000];int main( ){ int t; scanf( "%d",&t ); num[0] = num[1] = 0; while( t-- ) { scanf( "%d",&n ); memset( num,0,sizeof( num ) ); for( int i = 2; i <= n
阅读全文
摘要:开始我直接打表一直不能过,后来知道有删选法这一东西,水过62MS#include<stdio.h>#include<string.h>int num[100005],c[100005];void shuaixuan( )//筛选法{ memset( num,0,sizeof( num ) ); for( int i = 2; i < 100005; ++i ) for( int j = 2; i * j < 100005; ++j ) num[i*j] = 1;}void chart( )//预处理{ num[1] = 1; memset( c,0,size
阅读全文
摘要:这题我开始暴力,结果TLE,后来想到这种题应该都有精简的方法,就去网上搜,没想到新学了一招,筛选法,估计最小公倍数也能这样做了,哈哈#include<stdio.h>#include<string.h>long long num[500005];void shaixuan( ){ for( int i = 1; i < 500005; ++i ) num[i] = 1; for( int i = 2; i < 500005; ++i ) for( int j = 2; j * i < 500005; ++j ) num[i*j] += i; }int
阅读全文
摘要:这题郁闷了,排序过不了,后来仔细想想不用排序, 于是果断删了,没想到删了再杭电能过,在北大不能过,真郁闷了这题是以简单DFS,在搜到时把结果存起来,然后再暴力搜索,看是否已存在这样的sum,最后一次性输出来就o了.先贴一神代码把.... 这个hdu poj 都能过( 这个算法非常好.以后对于组合问题都能这么干了 )#include<stdio.h>int t,n,num[20],flag,res[20];void DFS( int p,int s,int nu ){ if( s == t ) { flag = 1; for( int i = 0; i < nu; ++i )
阅读全文
摘要:说实话,这题真没做出来,思路有,但是有问题一直不能解决,后来别人提供的思路.不多说了....这题就是要求形成一个环,没两个相邻的数之和不能为素数,当然最后一个要考虑他跟第一个的关系,这里的DFS其实只要递归一个东西,而我递归的东西却一直不对,主要受变形课影响,其实递归的东西肯定是当前的数目,然后把当前的数存在数组里,以便下一次递归的时候可以跟这一次的数比较....#include<stdio.h>#include<string.h>int n,num[25],des[25];int gcd( int n ){ int f = 0; if( n == 2 || n ==
阅读全文
摘要:这里跟前面两个字符串处理差不多,http://www.cnblogs.com/Lvsi/archive/2011/05/03/2035640.htmlhttp://www.cnblogs.com/Lvsi/archive/2011/05/04/2036156.html#include<stdio.h>#include<string.h>int n;char str[10005],ch[1005][1005];void sort( ){ int i = 0; while( str[i] ) { if( str[i] == ' ' ) { ++i; cont
阅读全文
摘要:这题一水题 .... 据说可以用函数做 ( strtok) ,没用,没看懂,自己写了一个.. 水果,不过记住中间有很多空格要原样输出......还有把字符串分开后,在每个后面都得赋值ASCII为0额#include<stdio.h>#include<string.h>int n,c;char str[1005],ch[1005][1005];void sort( ){ int i = 0; while( str[i] ) { int j = 0; while( str[i] == ' ' ) ch[c][j++] = str[i++]; ch[c][j]
阅读全文
摘要:这里最好用qsort排序,而在写cmp函数时要注意,对rank进行排序是从大到小,所以那里不要写反了,还有排序优先级是origin,,rank,字典序,这里别弄错了,我悲剧额,对rank排序一直是错的,最后听小白一说才恍然大悟,在此鸣谢小白,直接上代码#include<stdio.h>#include<stdlib.h>#include<string.h>struct e{ char w[25],o[25],l[25];}p[505];int n;int cmp1( char s1[],char s2[] ){ if( s1[0] == s2[0] ) re
阅读全文
摘要:这个很水用个结构体,不过排序要用快排,别用冒泡,否则超时.TLE 我就悲剧了一次#include<stdio.h>#include<stdlib.h>#include<string.h>struct e{ char t[20],name[20]; int s;}p[100005];int n,c;int cmp1( const void *a,const void *b ){ struct e f1 = *( (e *)a ),f2 = *( ( e * )b ); return strcmp( f1.t,f2.t );}int cmp2( const vo
阅读全文
摘要:简单排序,这里先把一个字符串按5来分成很多字符串,然后对这些字符串进行比较#include<stdio.h>#include<string.h>#include<stdlib.h>int n;char str1[1005],str2[1005][1005];void sorts( )//将字符串分成很多个{ memset( str2,0,sizeof( str2 ) ); int i = 0; while( str1[i] ) { if( str1[i]&&str1[i] == '5' )//处理前面多余的5 { ++i; c
阅读全文
摘要:这里主要是纠结在闰年上面,没有生日的肯定是闰年的2月29,对吧,还有如果今年或18年后是闰年就要考虑,是在2月29前还是在2月29后#include<stdio.h>int judge( int x ){ if( x % 400 == 0 || ( x % 4== 0 && x % 100 != 0 ) ) return 1; return 0;}int main( ){ int y,m,d,t; while(scanf( "%d",&t )!= EOF) { while( t-- ) { scanf( "%d-%d-%d&qu
阅读全文
摘要:像这种找最短距离的,只要先排序,然后找中间点就可以了,哈哈,跟着类似的还有 2083 简易板之间最短距离#include<stdio.h>#include<stdlib.h>int n;double x[1000005],y[1000005];int cmp( const void *a,const void *b ){ return *( ( double * )a ) > *( ( double * )b ) ? 1 : -1;}int main( ){ while( scanf( "%d",&n ),n ) { for( int
阅读全文
摘要:这题要自己推算一下,开始还准备用贪心的,结果弄了很久弄不出,最后看大神的报告原来是由数学推出来的m > n;f1 = ( 100 - m )*( 100 - m ) + (m - n)(m-n);f2 = ( 100 - n )*( 100 - n );用二式减去一式分析可得f2总是大于f1,所以只要直接找到一个最小的n就可以了#include<stdio.h>int n,m,min;int main( ){ int t; scanf( "%d",&t ); while( t-- ) { scanf( "%d%d",&n
阅读全文
摘要:这题就是一最短路,不过,在这里是找"最长路",所以在初始化时不能赋值为0x7fffffff,而赋为0,还有存贮是记得用double型#include<stdio.h>int n,q,des[1005],s,e;double map[1005][1005],dis[1005];double Dij( ){ for( int i = 0; i <= n; ++i ) des[i] = 0,dis[i] = 0; dis[s] = 1; for( int i = 1; i <= n; ++i ) { int pos = -1; double max = -
阅读全文
摘要:这题是一个最小生成树,用kustra做,在给结构体排序时要用快排,不能冒泡,否则超时,这里有我冒泡的代码,你可以提交试试#include<stdio.h>#include<stdlib.h>int set[105],n,m,sum;struct e{ int x,y,v;}val[10000];int cmp( const void *a,const void *b ){ return ( ( e * )a )-> v - ( ( e * )b ) ->v;}int find( int x ){ return x == set[x] ? x : set[x]
阅读全文