摘要: 呃,整整坐了一天,终于弄懂了这题,同时也弄明白了一个知识点——扩展欧几里德算法,真不容易啊!恩,怎么解释呢,从这道题说起吧。解这题的思路就是:(a+x*c)%2^k=b,即x*c=(b-a)%2^k。扩展欧几里德算法就是对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ,使得 gcd(a,b)=ax+by。解x,y的方法为:1、b=0时,x=1,y=0,gcd(a,b)=a;2、a*b<>0时,a*x1+b*y1=gcd(a,b);b*x2+(a%b)*y2=gcd(b,a%b);根据朴素欧几里德定理知道,gcd(a,b)=g 阅读全文
posted @ 2012-05-04 19:22 Misty_1 阅读(406) 评论(1) 推荐(0) 编辑
摘要: 恩,以前做过的一个智力题,本以为可以很简单解决,没想到却拖了好几天也没解决,总的来说是没理清思路,没想好怎么保存已经确定的状态,最后才考了一下网上代码才解决,其实开两个数组就行了,只是当时没想到,总是想着能少开个数组就少开个,节约空间,但是这样会浪费时间,其实结果是一样。代码:#include <stdio.h>#include <stdlib.h>#include <string.h>int w[20];//存储现态;int f[20];//存储上一个状态int main(){ int len,cas,i,j; char left[20],right[20 阅读全文
posted @ 2012-05-04 09:59 Misty_1 阅读(186) 评论(0) 推荐(0) 编辑