- 博客(34)
- 收藏
- 关注
原创 名人博客和习题网站
高手的Blog 及ACM 好的网站2007-07-27 18:47http://blog.cs.swust.edu.cn/index.php?op=ViewArticle&articleId=676&blogId=68http://hi.baidu.com/gchrist/blog/item/2a89343fbd1d20ec54e723ff.htmlhttp://princetonboy.ycul
2010-05-28 16:51:00 2095
原创 感慨良多
前天晚上回去,本想敲几个代码,又怕吵醒宿舍里睡觉的同学,只好到各校的BBS上去逛逛,于是看到了下面两张图。 这两张图都是AlexanderYi发的,我也不清楚他叫什么名字 只知道他是dwyak的队友。 dwyak我知道,真名戴文渊,上海交大ACM-ICPC代表队队员、队长、教练,先后获得2004年第29届ACM国际大学生程序设计竞赛亚洲区预选赛台北赛区冠军、日本赛区冠军,2005年第29届ACM国
2010-05-28 16:43:00 630
原创 位运算(实战篇)
下面分享的是我自己写的三个代码,里面有些题目也是我自己出的。这些代码都是在我的Pascal时代写的,恕不提供C语言了。代码写得并不好,我只是想告诉大家位运算在实战中的应用,包括了搜索和状态压缩DP方面的题目。其实大家可以在网上找到更多用位运算优化的题目,这里整理出一些自己写的代码,只是为了原创系列文章的完整性。这一系列文章到这里就结束了,希望大家能有所收获。 Matrix67原创,转贴请注明
2010-05-18 09:03:00 404
原创 位运算(技巧)
n皇后问题位运算版 n皇后问题是啥我就不说了吧,学编程的肯定都见过。下面的十多行代码是n皇后问题的一个高效位运算程序,看到过的人都夸它牛。初始时,upperlim:=(1 shl n)-1。主程序调用test(0,0,0)后sum的值就是n皇后总的解数。拿这个去交USACO,0.3s,暴爽。procedure test(row,ld,rd:longint);var pos,p:lo
2010-05-18 09:03:00 453
原创 位运算(进阶篇1)
二进制中的1有奇数个还是偶数个 我们可以用下面的代码来计算一个32位整数的二进制中1的个数的奇偶性,当输入数据的二进制表示里有偶数个数字1时程序输出0,有奇数个则输出1。例如,1314520的二进制101000000111011011000中有9个1,则x=1314520时程序输出1。var i,x,c:longint;begin readln(x); c:=0; for i
2010-05-18 09:02:00 425
原创 位运算(基础篇)
什么是位运算? 程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。比如,and运算本来是一个逻辑运算符,但整数与整数之间也可以进行and运算。举个例子,6的二进制是110,11的二进制是1011,那么6 and 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理): 110
2010-05-18 09:01:00 427
原创 ACM c函数大全
函数名: abs 功 能: 求整数的绝对值用 法: int abs(int i);程序例:#include #include int main(void){ int number = -1234; printf("number: %d absolute value: %d/n", number, abs(number)); return 0;}函数名: atof功 能: 把字
2010-05-18 08:59:00 780
原创 C++常量范围
有时要在程序中设置一个大的整数表示正的无穷大,熟悉PASCAL的人都知道有两个经常用到的符号常量叫MAXINT和MAXLONGINT。C++中该怎么办呢?其实在头文件limits中有关于各种整型常量的取值范围和最大整型和最小整型的定义。例如, | signed
2010-05-18 08:48:00 869
原创 一键设置IP
一、原型:extern void *malloc(unsigned int num_bytes);头文件:#include 或 #include (注意:alloc.h 与 malloc.h 的内容是完全一致的。)功能:分配长度为num_bytes字节的内存块说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释
2010-05-18 08:47:00 501
原创 malloc
一、原型:extern void *malloc(unsigned int num_bytes);头文件:#include 或 #include (注意:alloc.h 与 malloc.h 的内容是完全一致的。)功能:分配长度为num_bytes字节的内存块说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释
2010-05-18 08:45:00 485 2
原创 acm分类
acm.pku.edu.cn1、 排序1423, 1694, 1723, 1727, 1763, 1788, 1828, 1838, 1840, 2201, 2376, 2377, 2380, 1318, 1877, 1928, 1971, 1974, 1990, 2001, 2002, 2092, 2379,1002(需要字符处理,排序用快排即可) 1007(稳定的排序) 2159(题意较难懂)
2010-04-26 22:04:00 378
原创 杭电动态规划习题
Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱 最脑残的是把总的概率以为是抢N家银行的概率之和… 把状态转移方程写成了f[j]=max{f[j],f[j-q[i].v]+q[i].money}(f[j]表示在概率j之下能抢的大洋);正确的方程
2010-04-25 21:20:00 1819
原创 几种算法
几种算法2010-01-22 22:17 NO.1 贪心算法 1 在对问题求解时,总是作出在当前看来是最好的选择。也就是说,不从整体上加以考虑,它所作出的仅仅是在某种意义上的局部最优解(是否是全局最优,需要证明)。2 基本步骤:1、从问题的某个初始解出发。2、采用循环语句,当可以向求解目标
2010-04-25 21:19:00 453
原创 hd1005
#include int main(){ int f[100]; long A,B,n; int r,j; f[0]=f[1]=1; scanf("%d%d%ld",&A,&B,&n);//cin >> A >> B >> n; while(A&&B&&n) { int i=2; r = 7; while(1) { if(i==n) break; f[i] = (A*f[i-
2010-04-25 16:17:00 724
原创 hd1003
#includeint main(){ int n,m,i,j,k; int a[100001]; int st,end; int maxsum,thissum; scanf("%d",&n); for(k=1;k { scanf("%d",&m); for(i=0;i { scanf("%d",&a[i]); } for(i=0;i { thissum = 0;
2010-04-25 16:07:00 570
原创 汉字
#include #include using namespace std;int first(unsigned char ch) { if(ch >= 0xb0 && ch return 1; else return 0;}int second(unsigned char ch) { if(ch >= 0xa1 && ch return 1; else return 0;}v
2010-04-24 21:31:00 434
原创 input and putput
ACM竞赛之输入输出描述字符串的输入输出处理。 输入第一行是一个正整数N,最大为100。之后是多行字符串(行数大于N), 每一行字符串可能含有空格,字符数不超过1000。输出先将输入中的前N行字符串(可能含有空格)原样输出,再将余下的字符串(不含有空格)以空格或回车分割依次按行输出。每行输出之间输出一个空行。样例输入2www.njupt.edu.cn NU
2010-04-24 21:30:00 685
原创 ACM输入输出
ACM竞赛之输入输出描述字符串的输入输出处理。 输入第一行是一个正整数N,最大为100。之后是多行字符串(行数大于N), 每一行字符串可能含有空格,字符数不超过1000。输出先将输入中的前N行字符串(可能含有空格)原样输出,再将余下的字符串(不含有空格)以空格或回车分割依次按行输出。每行输出之间输出一个空行。样例输入2www.njupt.edu.cn NU
2010-04-21 17:14:00 2355
原创 信息数字化2
题目1四名专家对四款赛车进行了评论:A说:2号赛车是最好的。B说:4号赛车是最好的。C说:3号赛车不是最好的。D说:B说错了。事实上只有一款赛车最佳,且只有一名专家的评论是正确的。算法思想:有4个bool型的数值相加,当且仅当只有一个正确时,即有1个等于1.其他3个等于0,这时表示只有一位专家说对了,这 是输出的m就是最好的赛车。试用C语言编程求解: 1)#inclu
2010-04-11 17:58:00 755
原创 第二大的数
#includevoid main(){ int find_sec_max(int data[],int count); int a[] = {2,4,6,8,7,2,5}; printf("%d",find_sec_max(a,5));}static int MINNUMBER = -32767;int find_sec_max( int data[] , int count)//
2010-04-11 17:57:00 441
原创 矩阵的算法
(1)矩阵的加、减运算 C(i,j)=a(i,j)+b(i,j) 加法 C(i,j)=a(i,j)-b(i,j) 减法 (2)矩阵相乘 (矩阵A有M*L个元素,矩阵B有L*N个元素,则矩阵C=A*B有M*N个元素)。矩阵C中任一元素 (i=1,2,…,m; j=1,2,…,n) #define M 2 #define L 4 #define N 3 void mv(int a[M][L], int
2010-04-11 17:56:00 695
原创 歌巴德猜想
任意一个大于等于6的偶数都可以分解为两个素数之和) 基本思想:n为大于等于6的任一偶数,可分解为n1和n2两个数,分别检查n1和n2是否为素数,如都是,则为一组解。如n1不是素数,就不必再检查n2是否素数。先从n1=3开始,检验n1和n2(n2=N-n1)是否素数。然后使n1+2 再检验n1、n2是否素数,… 直到n1=n/2为止。 利用上面的prime函数,验证哥德巴赫猜想的程序代码如下
2010-04-11 17:55:00 917
原创 最大子序列
#includeint MaxSubSum(int a[],int n){ int i,j; int seqstart,seqend; int maxsum,thissum; for(i=0;i { thissum = 0; for(j=i;j { thissum += a[j]; if(thissum>maxsum) { maxsum = thissum; seqs
2010-04-10 15:19:00 282
原创 Builder--EnumWindows
//---------------------------------------------------------------------------#include #pragma hdrstop#include "Unit1.h"//---------------------------------------------------------------------------
2010-04-10 15:18:00 393
原创 图的邻接表
#include#include#define MAX 20struct node{ int data; struct graph *next;};struct Graph{ struct node array[MAX]; int vexnum,arcnum;};void Create_Graph(struct Graph *G){ int i,j; int Visited[MAX]; struc
2010-04-10 15:16:00 270
原创 文件读写
#include#includevoid OpenFile(char filename[],char fcopyname[]){ char ch; char a[100]; FILE *p,*q; p = fopen(filename,"w"); printf("input a string:/n"); scanf("%s",a); q = fopen(fcopyname,"wt"); if(!q
2010-04-10 15:15:00 257
原创 汉诺塔
#includevoid Hano(int n,int a,int b,int c){ if(n==1) { printf("%c->%c/n",a,b); } else { Hano(n-1,a,c,b); printf("%c->%c/n",a,c); Hano(n-1,b,a,c); }}void main(){ int n; char a,b,c; print
2010-04-10 15:14:00 312
原创 动态数组(指针)
#include#include#define max 50struct array{ int *base; int length;};void main(){ int count,*p,i,n; struct array *s; s = (struct array *)malloc(sizeof(struct array)*max); while(scanf("%d",&count)==1) {
2010-04-10 15:14:00 415
原创 信息数字化
#includevoid main(){ int x; for(x=1;x { if(((x!=1)+(x==3)+(x==4)+(x!=4))==3) { printf("%c是小偷",x+64); break; } }}
2010-04-10 15:13:00 398
原创 八皇后问题
#include#include#define MAX 8 //8*8的棋盘int board[MAX];void show_result(){ int i; for(i=0;i printf("(%d,%d)",i,board[i]); printf("/n");}//检查是否在同一直线上int check_cross(int n){ int i; for(i=0;i { if(boar
2010-04-10 15:12:00 280
原创 动态规划01
#includevoid main(){ int i,j; int a[10][10][3]; int n; printf("input a number n:/n"); scanf("%d",&n); for(i=1;i { for(j=1;j { printf("input a number:/n"); scanf("%d",&a[i][j][1]); a[i][j][2] =
2010-04-10 15:07:00 255
原创 ProcessCreate
// 01CreateProcess.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include#includeint main(int argc, char* argv[]){ printf("Hello World!/n"); char szCommand[] = "cmd"
2010-04-10 15:06:00 348
原创 ProcessList
// 01ProcessList.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include#include#includeint main(int argc, char* argv[]){ PROCESSENTRY32 pe32; pe32.dwSize = sizeof
2010-04-10 15:04:00 307
原创 日历系统
#include#include#includeint main(){ int year,month,day=1,i,j,d,data,e; char h; printf("/n/n/t * 显示日历 * /n"); printf("/n/t-----------------------/n"); printf("/t请
2010-04-10 15:02:00 490
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人