ACM题心得及解题报告
傻笨
这个作者很懒,什么都没留下…
展开
-
杭电2115题解题报告
题目链接如下:http://acm.hdu.edu.cn/showproblem.php?pid=2115#include#includeint main(){long int a[10];int i,j,k,n,b[10][2],t,s2[10],h;char s[10][50],s1[50];k=0;h=1;while(1){原创 2013-04-10 21:52:24 · 575 阅读 · 0 评论 -
最大连续子序列
杭电1231题心得这是一道求最大连续子序列的题目,思路是转移方程是:f(n)=max(f(n-1)+a[i],a[i])!题目链接如下:http://acm.hdu.edu.cn/showproblem.php?pid=1231代码如下:#include#include#includeint a[10000],d[10000];int pp(int n,int原创 2013-04-10 15:19:07 · 485 阅读 · 0 评论 -
杭电1016
这是一道典型的搜索题!我一开始还看不懂!后来再别人的帮助下慢慢理解!#include#include#includeint a[21],shuzi[21],prime1[38]={0};int n;int prime(int x){ int i; for(i=2;i { if(x%i==0) {原创 2013-04-12 14:41:03 · 564 阅读 · 0 评论 -
杭电1010
#include#include#includeint n,m,t,flag;int starx,stary,doorx,doory,wallnumber;int movex[]={0,-1,0,1},movey[]={-1,0,1,0};char maze[7][7];void dfs(int,int,int); //深搜int main(){ int转载 2013-04-13 13:44:38 · 484 阅读 · 0 评论 -
杭电1015
#include#include#includeusing namespace std;int m,a,b,c,d,e;int A,B,C,D,E;char h[28];bool cmp(const char &a,const char &b){ return (b-a)>=0?false:true;}int main(){ int原创 2013-04-13 15:22:28 · 541 阅读 · 0 评论 -
杭电2522
这题用map来存储!把分子存到map中,然后当再次出现相同分子时就结束!#include#include#includeusing namespace std;int main(){ int i,n,k,m; while(scanf("%d",&n)==1) { while(n--) {原创 2013-04-12 16:03:58 · 516 阅读 · 0 评论 -
杭电2089
#include#includeusing namespace std;const int maxn=1000000+5;int a[maxn];int main(){ int i,j,n,m,temp,t,x; int sum=0,flag=1; for(i=1;i { x=i; flag=1;原创 2013-04-14 20:41:37 · 860 阅读 · 0 评论 -
杭电1010
#include#includeint n,m,t,flag;int starx,stary,doorx,doory,wallnumber;int movex[]={0,-1,0,1},movey[]={-1,0,1,0};char maze[7][7];void dfs(int,int,int); //深搜int main(){ int i,j; whi转载 2013-04-14 21:11:39 · 620 阅读 · 0 评论 -
杭电1016
#include#include#includeint a[21],shuzi[21],prime1[38]={0};int n;int prime(int x){ int i; for(i=2;isqrt(x);i++) { if(x%i==0) { return 0;原创 2013-04-14 21:12:50 · 387 阅读 · 0 评论 -
杭电2955题解题报告及01背包问题
这题要先这样想,把每个银行的钱看作是代价,而不被抓住的概率是价值!这样就简单多了,直接01背包搞起,其实01背包的代码都是差不多,只不过是有些地方要改变,而且做01背包问题主要是找到谁是代价,谁是价值!这样就直接套公式了!#include#include#include#includeusing namespace std;double dp[10010];int va原创 2013-04-23 15:49:05 · 928 阅读 · 0 评论 -
杭电2546题解题报告及01背包问题
这是我开始尝试着做背包问题,其实背包问题就是一个模式,掌握其二维的转移方程及一维的状态转移方程!#include#include#include#includeusing namespace std;const int maxn=1005;int dp[maxn];int value[maxn];int weight[maxn];int nvalue;i原创 2013-04-23 15:11:53 · 858 阅读 · 0 评论 -
杭电1203及01背包概率题
这是一道01背包概率题目,从正面考虑会有好多中情况,那么我们就可以从反面来考虑,直接考虑达到费用最大时一个学校都没有录取他时的最小概率,然后用一减就是至少得到一份通知书的最大概率,这题也是01背包的入门题目!#includeconst int maxn=10005;double dp[maxn];int value[maxn];double weight[maxn];int原创 2013-04-23 17:02:08 · 852 阅读 · 0 评论 -
杭电1312,搜索题
#include#include#include#includeusing namespace std;int w,h,i,j,sum=0;char map[30][30];char movex[4]={-1,1,0,0},movey[4]={0,0,-1,1};void dfs(int x,int y){ int i;//要使用局部变量!原创 2013-04-15 20:25:58 · 475 阅读 · 0 评论 -
杭电1241
这题题目我就没有看懂,还是学长告诉的,意思就是:@在一块的算作一块油田,求一共有多少块油田!坑爹吧!写完后,更加坑爹的事发生了,我定义了全局变量后,竟然还定义了局部变量!害的我找了好久,还是在学长帮助下找到错误的!#includechar a[100][100];int m,n;int movex[8][2]={{1,0},{1,-1},{1,1},{0,-1},{0,1},{-1原创 2013-04-16 16:10:38 · 503 阅读 · 0 评论 -
八皇后问题,杭电2553
方法一:#include #define NUMS 10/*输入的数字1---10*/int N;/*棋盘*/int chessboard[11][11];/* 用来记录拜访数目 */int cal;/*检查皇后放置此行此列是否可以,可以返回1,不可以返回0此递归是一行一行找的,K是棋盘的长度*/int dfs_check(int row转载 2013-04-20 17:20:57 · 948 阅读 · 0 评论 -
杭电1846简单的巴什博弈
#includeint main(){ int t,n,m; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); if(n%(m+1)!=0) printf("first\n");原创 2013-05-03 14:18:37 · 587 阅读 · 0 评论 -
ACM算法相关资料
一:知识点数据结构:1,单,双链表及循环链表2,树的表示与存储,二叉树(概念,遍历)二叉树的应用(二叉排序树,判定树,博弈树,解答树等)3,文件操作(从文本文件中读入数据并输出到文本文件中)4,图(基本概念,存储结构,图的运算)数学知识1,离散数学知识的应用(如排列组合、简单的图论,数理逻辑)2,数论知识3,线性代数4,组合代数5,计算几何二转载 2013-05-02 15:12:11 · 1817 阅读 · 0 评论 -
4492
#include#include#includeusing namespace std;int main(){ int t,n,m,x,i,len,sum; char a[100]; scanf("%d",&t); while(t--) { scanf("%d%*c",&n); printf(原创 2013-05-17 18:01:58 · 667 阅读 · 0 评论 -
杭电1075
这道题目可以用STL中map容器!不过其中有一点我不懂!#include#include#include#include#includeusing namespace std;mapp;int main(){ int i; string mar,earth,s; cin>>s; while(cin>>earth)原创 2013-05-17 15:40:09 · 557 阅读 · 0 评论 -
杭电2802
这道题只要找出规律就会知道怎么做!一看到这种题目就要想想有没有循环!而这题循环是4018,至于为什么自己可以写代码观察!找出循环点的代码:#include#includeusing namespace std;const int maxn=10000;int a[maxn];int main(){// int f[maxn]; a[1]=1;原创 2013-05-17 16:40:18 · 611 阅读 · 0 评论 -
杭电4535
这道题目属于数学题,类型和拿信封问题一样,利用错排公式!f(n)=(n-1)*(f(n-1)+f(n-2));代码:#includeusing namespace std;const __int64 maxn=1000000000+7;int main(){ int t; int n,i; __int64 a[100]; a[1]原创 2013-05-17 16:59:24 · 473 阅读 · 0 评论 -
hdu1792
这是一道数论题目,不过知道公式就好简单!我是看了大牛的博客才知道的!附上网址提供参考:http://hi.baidu.com/qq258513813/item/8c54f5133dce6fd6bf9042e5代码如下:#include#includeusing namespace std;int main(){ __int64 a,b; whil原创 2013-05-17 15:58:25 · 675 阅读 · 0 评论 -
杭电1166
#include #include using namespace std;const int maxn=50005;int sum[4*maxn];int a[maxn];void build(int u,int l,int r){ if(l==r) { sum[u]=a[l]; return ;原创 2013-05-18 17:06:19 · 563 阅读 · 0 评论 -
杭电1698
这题我看着学长的代码敲了四遍,终于对了!我都背出来了!苦逼啊!#include #include using namespace std;const int maxn=100005;#define lz 2*u,l,mid#define rz 2*u+1,mid+1,rint sum[4*maxn];int flag[4*maxn];void build原创 2013-05-18 20:00:09 · 654 阅读 · 0 评论 -
杭电1022
这是一道栈的应用,这是我第一次做栈的题目,不是很懂,虽然在书上也看到一道这样的题目,用到了STL中stack容器,而这题可以不用#include#includeint main(){ int n,i,j,k,top; char a[200],b[200],c[200],d[1000][20]; while(scanf("%d%s%s",&n,a,b)!原创 2013-05-04 18:40:34 · 724 阅读 · 0 评论 -
杭电2116
这题看起来很简单!可我都不知道WA了多少次了,这题不能直接用数学里的pow函数,应该是用数组,然后利用连乘的方法求2的多少次方!不过还有个地方要注意,有好多人都不会想到,故直接提交!还有就是一定要用G++提交,我一开始用c提交,WA了好多次,然后用c++提交,还是错了好多次,最后用G++提交才有用,至于为什么,我也不清楚#include#include__int64 a[64]原创 2013-05-04 17:18:05 · 602 阅读 · 0 评论 -
杭电4464
#include#includeint main(){ int n,sum,max,len,i,k=1; char a[1000]; while(scanf("%d",&n)!=EOF) { max=0; getchar(); while(n--) {原创 2013-05-05 10:17:47 · 458 阅读 · 0 评论 -
杭电1517
博弈问题题意:两人玩游戏,从1开始,轮流对数进行累乘,直到超过一个指定的数。算法分析:①、如果输入是2~9,因为Stan是先手,所以Stan必胜。②、如果输入是10~18(9*2),因为Ollie是后手,不管第一次Stan乘的是多少,Stan肯定在2~9之间,如果Stan乘以2,那么Ollie就乘以9,那么Ollie乘以大于1的数都能超过10~18中的任何一个数,Ollie原创 2013-05-05 15:50:23 · 600 阅读 · 0 评论 -
杭电2516
这是一道除了三大博弈之外的令一种菲波那契数博弈,即就是只要该数为斐波纳契数,那第一个拿的必为失败!后者一定为胜者!#include#includeusing namespace std;int main(){ int n,i,a[100]; a[0]=0;a[1]=1; for(i=2;i a[i]=a[i-1]+a[i-2];原创 2013-05-05 16:14:31 · 630 阅读 · 0 评论 -
杭电2188
这是一道简单的巴什博弈!很水的,入门!#includeint main(){ int t,n,m; while(scanf("%d",&t)!=EOF) { while(t--) { scanf("%d%d",&n,&m); if(n%(m+1)==0)原创 2013-05-05 15:20:41 · 645 阅读 · 0 评论 -
杭电4147
这题很简单,但我提交时却WA了一次,错在一个知识点上,我觉得有必要写下来,以后可以看看!这是AC代码:#include#includeint main(){ int s[4],min,sum,len,i; char a[1000]; int n,b,d,e,f; while(scanf("%d%d%d%d%d",&n,&b,&d,&e,&原创 2013-05-05 19:23:32 · 457 阅读 · 0 评论 -
杭电4548
这道题目其实不难,利用素数筛选法,就可以找出来!#include #include using namespace std;const int maxn=1000000;int prime[maxn];int cnt[maxn];void sushu(){ int i,j; for(i=2;i prime[i]=0;原创 2013-05-18 20:42:43 · 671 阅读 · 0 评论 -
杭电1564
这是一道博弈题目,要清楚理解题意,然后在画出图,模拟几遍就知道怎么做了,思路就是:两个人走过的路程数加起来会等于2n,故只要判断n是奇数还是偶数,就知道谁是最后到达的!#includeint main(){ int n; while(scanf("%d",&n)!=EOF&&n!=0) { if(n%2==0)原创 2013-05-05 18:23:21 · 585 阅读 · 0 评论 -
杭电4223
求连续和的绝对值最小的子串;也有一定的技巧!#includeint main(){ int t,n,a[1005],k,i,j; __int64 sum,min,x; scanf("%d",&t); k=1; while(t--) { scanf("%d",&n); for(i=0; i原创 2013-05-05 19:55:03 · 450 阅读 · 0 评论 -
杭电1576
这题属于数论入门题目,我看了别人的代码,有好几种思路,有扩展欧几里 德的思路,不过我觉得这种思路,我们易于想到!思路:设A = k * 9973 + n ,A/ B = C, C = P * 9973 + x,x即为我们所求的答案。易知,A = k* 9973 + n =B * P * 9973 + B * x,化简后得k * 9973 = B * P * 9973 + B * x - n,因原创 2013-05-07 18:36:13 · 723 阅读 · 0 评论 -
杭电2176
#include#define maxn 200000int a[maxn];int main(){ int n,i,sum,sum2; while(scanf("%d",&n),n) { sum=0; for(i=0;in;i++) { scanf("%d",&a[i]);原创 2013-05-07 14:42:38 · 533 阅读 · 0 评论 -
杭电1262
这是一道数论入门题目!其实很简单,就是先利用素数筛选法,先打表!找出10000以内的素数!#include#includeusing namespace std;const int maxn=10000;int a[maxn];void prime(){ int i,j; for(i=2;i { a[i]=1;原创 2013-05-07 19:03:13 · 647 阅读 · 0 评论 -
杭电1492
这题如果知道一个定理的话就很好做了!定理:一个正整数 n 可以用素因子唯一表示为 p1^r1 * p2^r2 * ... pk^rk (其中 pi 为素数) , 那么这个数的因子的个数就是,(r1+1)*(r2+1)*...*(rk+1).#include#includeusing namespace std;int main(){ int a1,原创 2013-05-07 19:27:59 · 559 阅读 · 0 评论 -
HDU 1736
这也是一道属于字符串方面的题目!代码如下:#include #include #include using namespace std;char a[201000];int main(){ int len,i,sum; while((gets(a))!=NULL) { len=strlen(a); s原创 2013-05-21 15:26:39 · 771 阅读 · 0 评论 -
HDU 2925
方法一,超时:#include #include #include const int maxn=1000000;using namespace std;int a[maxn];int main(){ int n,d,i,*p; while(scanf("%d%d",&n,&d)!=EOF&&n!=0&&d!=0) {原创 2013-05-21 19:35:20 · 665 阅读 · 0 评论