2013年7月31日
摘要: 公式: (a+b)%k = (a%k + b%k)%k (a-b)%k = (a%k - b%k)%k#include #include #define M 1000000#define MOD 3int map[M] = {7,11};void init(){ for(int i=2; i<M; i++) { map[i] = (map[i-2] % MOD + map[i-1] % MOD) % MOD; }}int main(int argc, char* argv[]){ #ifdef __MYLOCAL freopen("in.txt"... 阅读全文
posted @ 2013-07-31 19:39 lk1993 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 注意 i*i*i 会越界,应定义为 __int64#include #include #define M 100002__int64 map[M] = {0,1};void init(){ for(__int64 i=2; i=0) { printf("%I64d\n",map[n]); } return 0;} 阅读全文
posted @ 2013-07-31 19:16 lk1993 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 这道题以前写过,代码啰嗦,现重写特殊情况:1: 000 0000002: +000 -000003:000.00000 -000.000004:+000.00000 -000.000005: 0000123.4560000 -123.456。。。。。#include #include #define M 100000char A[M],B[M];void conv(char *&pD){ char flag = '*'; if(*pD == '+' || *pD == '-') { flag = *pD; pD++; } while(*p 阅读全文
posted @ 2013-07-31 10:50 lk1993 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 最优子结构分析:如果A、B可以组成C,C最后一个字母必定是A或B的最后一个字母组成。C去除除最后一位,变成是否可以求出A-1和B或A和B-1是否可以构成C-1状态转移方程:用f[i][j] 表示A前 i 位和B前 j 位是否可以组成C的前i+j位 dp[i][j] = (dp[i-1][j] && A[i]==C[i+j]) || (dp[i][j-1] && B[j]==C[i+j])#include #include #define M 202char A[M],B[M],C[M*2];int dp[M][M];int run(){ scanf(" 阅读全文
posted @ 2013-07-31 09:44 lk1993 阅读(166) 评论(0) 推荐(0) 编辑