2012年9月5日
摘要: ^按位异或的意思。就是“不同为1,相同为0” 1^1=0 0^1=1 0^0=0举个例子:3^5=?3=(0011)B 5=(0101)B 0011^ 0101———— 01100110的十进制数是6所以3^5=6这题其实是说存在一个大写字母x,然后让原文(都是大写字母)和x做xor后得到密文。现在给密文求原文。因为x不知道,所以枚举x。判断方法是判断是否解密出来的原文都在'A'-'Z'范围内。起初做的时候不明白那个异或怎么弄的。只要知道^符号就能做了。代码:View Code 1 #include<iostream> 2 using namespa 阅读全文
posted @ 2012-09-05 15:36 xinmenghuairi 阅读(344) 评论(0) 推荐(0) 编辑
摘要: 这道题讲的是求阶乘的位数。叫自己做真不知道该怎么做。我知道肯定是有公式的。在网上找了下是斯特林公式:lnN!=NlnN-N+0.5*ln(2*N*pi)有了这个公式就没问题了代码:View Code 1 #include<iostream> 2 #include<math.h> 3 #define pi 3.1415926 4 using namespace std; 5 int x,y; 6 void putresult() 7 { 8 double t=x; 9 t=(t*log(t)-t+0.5*log(2*t*pi))/log(10.0);10 y=int... 阅读全文
posted @ 2012-09-05 14:24 xinmenghuairi 阅读(229) 评论(0) 推荐(0) 编辑
  2012年9月2日
摘要: 简单的贪心题:只需要将结束时间利用进行排序后,在未安排的活动中挑选结束时间最早的活动安排,好给后面的活动安排留出更多的空间,从而达到安排最多活动的目标。 加上一个判断条件就可以搞定了代码:View Code 1 #include<iostream> 2 #include <stdlib.h> 3 using namespace std; 4 struct timee 5 { 6 int st; 7 int ed; 8 }t[102]; 9 int cmp (const void *a,const void *b)10 {11 return (*(timee *)a).. 阅读全文
posted @ 2012-09-02 14:02 xinmenghuairi 阅读(375) 评论(0) 推荐(0) 编辑
  2012年8月16日
摘要: 这个要是直接用找有公约数的会超时的。要用筛选法,就是在2到x/2中找到能被x整除的数,然后将那个数标记用hash[i]=1(hash初始化为0);再将那个数的倍数(小与x)找到再将他们标记(即都符合是有大于1 的公约数)最后找到标记为0的个数s(及新朋友),要减1(因为刚才算的都没包括x,hash[x]=0的本身要除掉),网上的还用了欧拉公式(比较牛的)筛选法代码:View Code 1 #include<iostream> 2 #include<string> 3 using namespace std; 4 /*int gcd(int a,int b) 5 { 6 阅读全文
posted @ 2012-08-16 10:24 xinmenghuairi 阅读(264) 评论(0) 推荐(0) 编辑
  2012年8月13日
摘要: Problem DescriptionThe Regional Contest is coming near, and all the acmers become very excited. As well as our coaches, they're very strategy, for they always think again and again how to select players , how to choose three players into one team and which team to assign to one or two of all sit 阅读全文
posted @ 2012-08-13 11:00 xinmenghuairi 阅读(168) 评论(0) 推荐(0) 编辑
  2012年8月4日
摘要: 这个题也只要用并查找的模版,然后再找最大的树集合。代码:View Code 1 #include<iostream> 2 using namespace std; 3 int set[10000001],c[10000001]; 4 void mst() 5 { 6 for(int i=1;i<10000001;i++) 7 { 8 set[i]=i; 9 c[i]=0;10 }11 }12 13 int find(int x)14 {15 if(x!=set[x])16 set[x]=find(set[x]);17 re... 阅读全文
posted @ 2012-08-04 10:31 xinmenghuairi 阅读(135) 评论(0) 推荐(0) 编辑
  2012年8月3日
摘要: 并查集的经典两个函数模版:(之前写的模版有错)int set[10000001],c[10000001];void mst(){ for(int i=1;i<10000001;i++) { set[i]=i; c[i]=0; }}int find(int x){ if(x!=set[x]) set[x]=find(set[x]); return set[x];}void memg(int x,int y){ x=find(x); y=find(y); if(x==y) return ;else set[x]=y;} 阅读全文
posted @ 2012-08-03 23:10 xinmenghuairi 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 要注意有特殊情况0 0,只要记录点是否都记录了,连接的边和用到的点的差是1就可以了。代码:View Code 1 #include<iostream> 2 using namespace std; 3 int lu[100001]; 4 int used[100001]; 5 int find(int x) 6 { 7 while(x!=lu[x]) 8 x=lu[x]; 9 return x;10 } 11 12 int memger(int x,int y)13 {14 x=find(x);15 y=find(y);16 if(x==... 阅读全文
posted @ 2012-08-03 23:09 xinmenghuairi 阅读(472) 评论(0) 推荐(0) 编辑
摘要: 这道题用djs算法就可以的。。。起初用FLOYD算法结果超时了。。。用djs时memset函数没用好。。。结果输出都是错的。。定义数组初始最大时要这样定义#define MAX 0x4f4f4f4fint map【1001】【1001】;memset(map,0x4f,sizeof(map));还有就是把终点作为起始点代码:View Code 1 #include<iostream> 2 #define MAX 0x4f4f4f4f 3 using namespace std; 4 int map[1002][1002]; 5 int dis[1002]; 6 int n,m,mu 阅读全文
posted @ 2012-08-03 11:53 xinmenghuairi 阅读(195) 评论(0) 推荐(0) 编辑
  2012年8月2日
摘要: 这个题是要我们把互相认识的人归到一桌(如果有两个人认识另一个人认识这两个人中其中一个也可归到这一桌)这个题直接利用简单的查找可以了。。。呵呵。。。查找还不是很懂啊。。。我就直接用模版了。。代码:View Code 1 #include<iostream> 2 using namespace std; 3 int sum,n,m; 4 int lu[1001]; 5 6 void mems(int x) 7 { 8 for(int i=1;i<=x;i++) 9 lu[i]=i;10 }11 12 int find(int x)13 {14 if(x!=lu[x... 阅读全文
posted @ 2012-08-02 11:14 xinmenghuairi 阅读(158) 评论(0) 推荐(0) 编辑