上一页 1 2 3 4 5 6 7 8 9 ··· 14 下一页
摘要: 暴搜就行,还有一个方法,是logn的算法的,等下看a^b2的代码吧,上暴搜的代码:#include <stdio.h>#include <stdlib.h>int main(int argc, char **argv){ int i; int a, b; int s = 1; scanf("%d%d", &a, &b); for(i = 1; i <= b; i++){ s *= a; s %= 1012; } printf("%d\n", s); return 0;} 阅读全文
posted @ 2011-08-07 17:34 zqynux 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 果断直接SPFA,f[i][j]代表到达(i,j)的时间,f[i][j] = f[a][b] + num[i][j] (a, b) 是(i, j)相邻的.. 代码:#include <stdio.h>#include <stdlib.h>int map[25][25];#define MAX 4000struct box{ int x, y;}queue[MAX];int head, rear;int used[25][25];int dis[25][25];int m, n;void enqueue(int x, int y){ if(used[x][y]){ ret 阅读全文
posted @ 2011-08-07 17:33 zqynux 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 我用的暴搜,别人说还有一种方法:题目要求n个数同余。等价于求这n个数两两求差(大减小)所得的所有数的最大公约数。 我的暴搜代码如下:#include <stdio.h>#include <stdlib.h>int num[100];int ans;int main(int argc, char **argv){ int i, j, t; int n, max = 0; scanf("%d", &n); for(i = 0; i < n; i++){ scanf("%d", &num[i]); if(max & 阅读全文
posted @ 2011-08-07 17:31 zqynux 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 简单的模拟吧,大家都尝试尝试~~不太难,代码:#include <stdio.h>#include <ctype.h>#include <string.h>#include <stdlib.h>char str[101];char c;char *getval(char *str, int *i){ int t = 0, m = 0; if(str[0] == '-'){ m = 1; str++; }else if(str[0] == '+'){ str++; } while(isdigit(*str)){ t 阅读全文
posted @ 2011-08-07 10:46 zqynux 阅读(528) 评论(0) 推荐(0) 编辑
摘要: 设f[i][j]是前i个水晶搭建成两座高度差值为j的较高的那座的高度,转移方程如下: 我用的不是f[i][j]=....,而是根据f[i][j]推出f[i+1][...],所以不好写方程,看代码吧:#include <stdio.h>#include <stdlib.h>int num[101];int f[101][200001];#define max(a, b) ((a)>(b)?(a):(b))int main(int argc, char **argv){ int i, j, sum = 0; int n; scanf("%d", & 阅读全文
posted @ 2011-08-06 16:45 zqynux 阅读(382) 评论(0) 推荐(0) 编辑
摘要: f[i][j]代表j个乘号, 前i位数的最大值, 转移方程式: f[i][j] = max{f[k][j - 1] + num[k + 1][i]} (1 <= k < i),num[i][j]代表第i位数到第j位数组成的数字是多少。 代码如下:#include <stdio.h>#include <stdlib.h>typedef unsigned long long bignum;bignum f[41][31];bignum num[41][41];char str[42];#define max(a, b) ((a)>(b)?(a):(b))i 阅读全文
posted @ 2011-08-06 15:30 zqynux 阅读(2667) 评论(0) 推荐(1) 编辑
摘要: DP:f[i] = f[j] + 1 (1<= j < i, 且j是i的前缀.) 代码如下:#include <stdio.h>#include <string.h>#include <stdlib.h>char str[2001][501];int f[2001];int ans = 0;int main(int argc, char **argv){ int i, j; int n; scanf("%d", &n); for(i = 1; i <= n; i++){ scanf("%s", 阅读全文
posted @ 2011-08-06 14:49 zqynux 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 别人都说直接输出一行中>=k的数目就可以了,但我觉得不保险。不过仔细一想,好像可以证明它是对的,但是我证明不好!所以我就直接写了一个记录性的搜索,代码如下:#include <stdio.h>#include <stdlib.h>int map[200][200];int n, k;int ans = 0;int count[200];int used[200];int search(int i){ int j, t = 0; if(count[i]){ return count[i] - 1; } if(used[i]){ return 1; } used[i] 阅读全文
posted @ 2011-08-06 11:09 zqynux 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 我直接暴力搜的,还有一个强连通分量的算法,琢磨一下,明天写:#include <stdio.h>#include <stdlib.h>#define INF 0xFFFFFFFint map[200][200];int count[200];int group[200];int n;void mark(int i, int k){ int j; if(group[i] == k){ return; } group[i] = k; for(j = 0; j < n; j++){ if(map[i][j] != INF && map[j][i] != 阅读全文
posted @ 2011-08-05 20:13 zqynux 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 终于知道了,在评测机中,long long 的输出和输入要用%I64d,记住记住!!!务必记住!!! 这题的话,因为总共的和是(n * n + 1) * n * n / 2,但是有n行要一模一样,所以直接输出(n * n + 1) * n / 2就可以了。#include <stdio.h>#include <stdlib.h>int main(int argc, char **argv){ long long n; scanf("%I64d", &n); printf("%I64d\n", n * (n * n + 1) 阅读全文
posted @ 2011-08-05 19:49 zqynux 阅读(289) 评论(2) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 14 下一页