- 注册时间
- 2007-12-27
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 40150
- 在线时间
- 小时
|
发表于 2018-4-26 11:58:14
|
显示全部楼层
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define MAXV 41
- #define TSIZE 91390
- #define INVALID 0xFFFFFFFFFFFFFFFFLL
- unsigned data[TSIZE];
- signed long long result[TSIZE];
- int dc;
- signed long long alldiff(unsigned int x[5])
- {
- signed long long r=0ll;
- int i,j;
- for(i=0;i<5;i++)for(j=i+1;j<5;j++){
- long long l1 = 1ll<<(x[j]-x[i]);
- if(r&l1)return INVALID;
- r|=l1;
- l1 = 1ll<<(MAXV-(x[j]-x[i]));
- if(r&l1)return INVALID;
- r|=l1;
- }
- return r;
- }
- void init()
- {
- unsigned int i[5];
- i[0]=0;
- for(i[1]=i[0]+1;i[1]<MAXV;i[1]++){
- for(i[2]=2*i[1]+1;i[2]<MAXV;i[2]++){
- for(i[3]=i[2]+i[1]+1;i[3]<MAXV;i[3]++){
- for(i[4]=i[3]+i[1]+1;i[4]<MAXV;i[4]++){
- signed long long r = alldiff(i);
- data[dc]=((i[1]<<24)|(i[2]<<16)|(i[3]<<8)|(i[4]<<0));
- result[dc]=r;
- dc++;
- }
- }
- }
- }
- }
- void output(unsigned x, unsigned y)
- {
- printf("0 %d %d %d %d;", x>>24, (x>>16)&255, (x>>8)&255, x&255);
- printf("0 %d %d %d %d\n",y>>24, (y>>16)&255, (y>>8)&255, y&255);
- }
- int main()
- {
- int i,j;
- init();
- printf("dc=%d\n",dc);
- for(i=0;i<dc;i++){
- if(result[i]==INVALID)continue;
- for(j=i+1;j<dc;j++){
- if((result[i]&result[j]) == 0ll){
- output(data[i],data[j]);
- }
- }
- }
- }
复制代码 |
|