TJU1106
摘要:不要被(m2-mn-n2)2=1这个条件迷惑而采用搜索。这题m,n,k的范围不允许用搜索的。找找m,n的规律可以发现,其实m,n都是相邻两项Fibonacci数。而且很容易证明得到当F(n-1),F(n)满足那个式子的时候F(n),F(n+1)也一定满足那个式子。 #includeusing namespace std;const int N = 1000;long long Fibonacci[...
阅读全文
posted @
2005-10-29 10:25
Fancy Mouse
阅读(567)
推荐(0)
TJU1279
摘要:题目意思很明确,知道四面体六条棱长求体积。数学问题,我们把四面体四个顶点放到坐标系中,并把A点设为原点,B坐标(x1,0,0),C坐标(x2,y2,0),D坐标(x3,y3,z3)。由于6条边,可以列出6个方程,因此可以解出x1,x2,y2,x3,y3,z3。而z3就是ABC面上的高。把ABC面积乘以z3再除以3就是答案了。 #include#include#includeusing namesp...
阅读全文
posted @
2005-10-28 21:05
Fancy Mouse
阅读(460)
推荐(0)
TJU1036
摘要:问题的关键是如何将这些满足要求的数排序。我们可以将数组下标为0的元素设为1,并且将3个指针均放在它的位置上。以后,第i个指针乘以第i个数(i=1,2,3),取最小的放入数组,并且更新指针。这样可以保证数组里的元素都是单调递增而且不漏掉一个的。问题就解决了。 #includeusing namespace std;const long k = 100000;long num[k];int main(...
阅读全文
posted @
2005-10-28 16:40
Fancy Mouse
阅读(332)
推荐(0)
TJU1040
摘要:用DP的思想保存已经求出的解的话速度会快一些。保存现今求出的所有取自x1~xm的数mod n的余数。扩展的时候就用一个余数乘以10,分别加上x1~xm,判断是否mod n为0,如果是,输出解,否则存入队列继续查找。 #includeusing namespace std;const int max_size = 0x40000;int queue[max_size];int num[10];int...
阅读全文
posted @
2005-10-28 16:36
Fancy Mouse
阅读(406)
推荐(0)
TJU1173
摘要:在思考这题的时候想到了一个很好的解法。建立一棵用数组模拟的树,每个结点的值类型是一个char,内容是ABC中的一个。先把原01串处理为AB串并作为叶子结点,然后两个两个合并。合并的时候,两结点全A或全B时,父结点值为A或B,否则为C。树建立起来以后,先序遍历即可。注意只有在一个结点的值为C的时候才访问左右孩子。 #include#includeusing namespace std;const i...
阅读全文
posted @
2005-10-28 16:27
Fancy Mouse
阅读(298)
推荐(0)
TJU1105
摘要:先用不定积分求出那个v=t2的,s=t3/3。然后列一个方程求根了。三次方程有求根公式,但是偶还米学到,所以就用二分叠代来求这个根了~ #include#includeusing namespace std;double f(double a,double k,double x);int main(){ double min,max,a,b,t,i; while(cin>>a>>b) ...
阅读全文
posted @
2005-10-22 02:44
Fancy Mouse
阅读(333)
推荐(0)
TJU1101
摘要:有质因子个数超过4个(可以相同)的就是牛数,否则就是弱数 #include#includeusing namespace std;int IsNiu(long n);int main(){ long n; while(cin>>n) { if(IsNiu(n)) cout1;}
阅读全文
posted @
2005-10-22 02:32
Fancy Mouse
阅读(345)
推荐(0)
TJU1100
摘要:问题的本质是对于4个数组,每一个数组求一个分拆使两部分差最小。典型的DP。不过当时做的时候DP还学得不咋地,所以还是用搜索的办法~~还好也ac了 #includeusing namespace std;int data[20],sum,min;void DFS(long item,int items,int curmin);int main(){ int s[4],i,j; long ...
阅读全文
posted @
2005-10-22 02:29
Fancy Mouse
阅读(398)
推荐(0)
TJU1096
摘要:基本思路是把每一个字符(1或0)看作一棵2叉树的叶结点,然后一层一层向上合并。合并规则是:如果两个都是"A",那合并为"A";两个都是"B"则合并为"B";否则就是"C"然后追加这两个字符串 在实现的过程中可以用一个队列来代替。初始化的时候把所有字符当作字符串塞进去,然后每次取出两个,处理后塞进去一个。可以证明,由于基因编码长度为2^k,因此每次取出的两个对应的原基因编码长度必定相等(就是不存在跨...
阅读全文
posted @
2005-10-22 02:18
Fancy Mouse
阅读(345)
推荐(0)
TJU1095
摘要:这题略带一些技巧。注意有5因子的数的处理。可以发现乘一个5与乘一个8的效果相同。于是我们对于每一个含有5因子的数在乘的时候做一下处理即可~ #includeusing namespace std;const int N = 101;const int a[10] = {1,1,2,6,4,4,4,8,4,6};int Positive(int n[N]);void DivideFive(int n...
阅读全文
posted @
2005-10-22 02:09
Fancy Mouse
阅读(324)
推荐(0)
TJU1093
摘要:两条航线交叉的充要条件是x1>x2,y1using namespace std;const int MaxN = 2004;typedef struct harbor{int A,B;}harbor;void Sort(harbor s[MaxN],int harbors);int main(){ harbor s[MaxN]; int DP[MaxN]; int harbors...
阅读全文
posted @
2005-10-22 01:56
Fancy Mouse
阅读(287)
推荐(0)
TJU1091
摘要:只要两个数加法不产生进位就能满足题意。对于首位来说,可以有8*9/2=36种选数方式(因为首位不为0),对于其他位来说,可以有9*10/2=55种选数方式,乘法原理以后,剩下来的就是大数乘法和输出了。 #includeusing namespace std;const int MAX = 100;class Num{public: Num(int n); Num operator *(...
阅读全文
posted @
2005-10-22 01:50
Fancy Mouse
阅读(291)
推荐(0)
TJU1076
摘要:要注意该函数mod7的余数一定是循环的。设法求出循环节长度,并且保留一个完整的循环节,程序接下来就没问题了~ #includeusing namespace std;const int N = 7;int loop;int f[55];void sFibonacci(int a,int b);int sFibonacci(long n);int main(){ int a,b; lon...
阅读全文
posted @
2005-10-22 01:46
Fancy Mouse
阅读(306)
推荐(0)
TJU1059
摘要:这题……noip普及组原题的数据规模1000,太简单了。这里被弄到了3000000……从oi到oj的提升哈~先要解决算法的问题。很容易得出f(x)的递推式f(0)+f(1)+f(2)+...+f(x/2)。但是,如果就照这个算的话,tle~~O(n^2)的复杂度,对于3000000的数据,能在1秒出解就……于是要换个思路。我们计s(x)=f(0)+f(1)+...+f(x)。这样,f(x)=s(x...
阅读全文
posted @
2005-10-22 01:42
Fancy Mouse
阅读(367)
推荐(0)
TJU1050
摘要:典型的DP,开一个数组,第i个元素记录原字符串中以第i个字符结束的最小划分数。d[i] = min{d[j] + 1},0#includeusing namespace std;const int MaxString = 256;class Dictionary{public: Dictionary(int word); int Find(char* word,int length);...
阅读全文
posted @
2005-10-22 01:29
Fancy Mouse
阅读(397)
推荐(0)
TJU1034
摘要:寻找四塔函数g(x)的递推式。我们将普通的3塔,即Hanoi塔问题的函数式记作f(x),易得f(x)=2^x-1。我们设一开始把x块东西中的a块放到第二个柱子上,这步用了g(a)次,然后,接下来x-a块放到第四个柱子上,由于只有3个柱子可以用,因此这步用了f(x-a)次。然后再把a块移过去用了g(a),所以总共消耗2*g(a)+f(x-a),所以g(x) = min{2*g(a)+f(x-a)},...
阅读全文
posted @
2005-10-22 01:17
Fancy Mouse
阅读(305)
推荐(0)
TJU1025
摘要:DFS(深搜),注意优化一下剪枝和求最小未使用数这两部分的代码就行了。 #includeusing namespace std;int PrimeList[50];int board[100];int NumUsed[101],MinNum;int size;void Solve();int Acceptable(int k,int cur);int IsPrime(int k);int mai...
阅读全文
posted @
2005-10-21 22:46
Fancy Mouse
阅读(414)
推荐(0)
TJU1081
摘要:没错,看懂题目即可 #include#includeusing namespace std;#define YES {cout>n) { flag1=1;flag2=0;m=(long)sqrt((double)n); for(temp=2;temp<=m;temp++) if(n % temp == 0) {flag1...
阅读全文
posted @
2005-10-05 02:17
Fancy Mouse
阅读(309)
推荐(0)
TJU1049
摘要:对于任何一个重量都存储一个状态变量,将0重量初始化为1,然后遍历所有砝码,碰到i是1,就将i+wj*k,k=1~nj都设置为1。最后遍历状态变量统计1的数量 #includeusing namespace std;int main(){ int status[20001],i,j,data,quantity,weight[20],number[20],max; cin>>data; ...
阅读全文
posted @
2005-10-05 02:15
Fancy Mouse
阅读(302)
推荐(0)
TJU1046
摘要:其实很简单。假设(1,1,1)染成黑色,然后对于所有小立方体黑白相间染色。则边长为偶数的时候,可以吃完馅饼的充要条件是两个格子同色;边长为奇数的时候,充要条件是两个格子都是黑色。待本人严格证明~~ #includeusing namespace std;int main(){ int size,x1,x2,x3,y1,y2,y3,data; cin>>data; while(da...
阅读全文
posted @
2005-10-05 02:11
Fancy Mouse
阅读(491)
推荐(0)