上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 85 下一页
  2012年5月13日
摘要: FZU_1704 在转化成同余方程组后需要确定变元的个数n,由于变元一旦确定就可以唯一确定一种方案,所以最后的方案种数就2^n,而变元的个数n就是M减去矩阵的秩。import java.math.BigInteger;import java.util.Scanner;public class Main { static int N, M; static int[][] mat = new int[110][110]; static Scanner cin = new Scanner(System.in); public static void main(String[... 阅读全文
posted @ 2012-05-13 20:37 Staginner 阅读(248) 评论(0) 推荐(0) 编辑
  2012年5月12日
摘要: POJ_2065 题目既然没有说无解的情况就当做一定有解来看待了,根据题意可以列出n个同余方程,然后用高斯消元+拓展欧几里得求得每个ai就可以了。#include<stdio.h>#include<string.h>#include<iostream>#define MAXD 80using namespace std;int mat[MAXD][MAXD], N, P, ans[MAXD];char b[MAXD], ch[128];void prepare(){ int i; for(i = 'a'; i <= 'z' 阅读全文
posted @ 2012-05-12 13:30 Staginner 阅读(191) 评论(0) 推荐(0) 编辑
  2012年5月11日
摘要: POJ_2947 将M条信息翻译成同余方程组后用高斯消元求解就可以了。#include<stdio.h>#include<string.h>#include<iostream>#define MAXD 310using namespace std;int N, M, mat[MAXD][MAXD], ans[MAXD], h[MAXD];char a[5], b[5], day[][5] = {"MON", "TUE", "WED", "THU", "FRI" 阅读全文
posted @ 2012-05-11 23:08 Staginner 阅读(243) 评论(0) 推荐(0) 编辑
摘要: URAL_1042 由于题目中说明了每个工人不能被其他工人取代,也就是说如果矩阵的列向量是线性无关的,于是增广矩阵的秩一定是N,所以不会有无解的情况,并且解是唯一的,所以直接用高斯消元求解即可。#include<stdio.h>#include<string.h>#include<iostream>#define MAXD 260using namespace std;int N, mat[MAXD][MAXD], ans[MAXD];void init(){ int i, j, k; memset(mat, 0, sizeof(mat)); for(i = 阅读全文
posted @ 2012-05-11 17:30 Staginner 阅读(306) 评论(0) 推荐(0) 编辑
摘要: POJ_1830 可以用高斯消元求矩阵的秩,这样就知道了有x个变元,而这些变元可以取任意值,对于每种情况,其他元会有唯一的解,所以一共就有2^x种方案。#include<stdio.h>#include<string.h>#include<iostream>#define MAXD 35using namespace std;int N, mat[MAXD][MAXD];void init(){ int i, j, k; memset(mat, 0, sizeof(mat)); scanf("%d", &N); for(i = 0 阅读全文
posted @ 2012-05-11 16:03 Staginner 阅读(307) 评论(0) 推荐(0) 编辑
摘要: POJ_1222 第一次接触高斯消元的题目,基本算是仿写出来的。由于题目没有说无解,也没有用special judge,所以应该按有唯一解的情况去做就可以了。 当然这个题目也可以用枚举第一行的操作+搜索的办法去解,一些思路可以参考我的POJ_1753的解题报告:http://www.cnblogs.com/staginner/archive/2011/10/29/2228784.html。#include<stdio.h>#include<string.h>#include<iostream>#define MAXD 35using namespace st 阅读全文
posted @ 2012-05-11 14:30 Staginner 阅读(255) 评论(0) 推荐(0) 编辑
摘要: UESTC_1558 如果这个题目不考虑t而是改成问最少的转换次数,那么我们只要每次让它转换得越大越好,因此就可以将所有的exchange按r进行排序,每一次在一定的范围内选出v最大的exchange即可(这一点可以用堆来实现)。 而现在是需要考虑t的,显然就不能直接贪心了,于是我们不妨往dp的角度上想一下。如果dp的话,那么就涉及到一个顺序的问题,按我们上面的思路将r排序后进行dp是否可行呢?是可以的,不妨假设y.r>=x.r且 y能够更新x,而由于y.r>=x.r,那么更新y的那个点就一定也可以更新x,而这样是比用y去更新x更优的。因此,如果我们将exchange按r排序后,后 阅读全文
posted @ 2012-05-11 11:10 Staginner 阅读(278) 评论(0) 推荐(0) 编辑
  2012年5月10日
摘要: UESTC_1546 这个题目可以借用判断合法括号序列的办法,将’(’看作1,将’)’看作-1,之后从左向右扫描一个序列并将扫描到的值累加起来,在这个过程中如果任意时刻这些值的和都不小于0,并且最后的时候这些值的和为0,那么就说明这个括号序列是合法的。 于是我们只要再用线段树实现修改及查询的操作,这个题目就算是解决了。为了便于修改和查询,我们可以用两个标记to、rev,to表示这个区间是否被set,rev表示这个区间是否被翻转。同时我们可以维护3个值lmin、lmax、sum,lmin表示从当前区间左端点开始最小的前缀和,lmax表示从当前区间开始最大的前缀和,sum表示当前区间的和。#i.. 阅读全文
posted @ 2012-05-10 12:39 Staginner 阅读(296) 评论(0) 推荐(0) 编辑
  2012年5月9日
摘要: URAL_1059 这个题目理解起来有点蛋疼,后来看了NOWCOW的翻译之后发现是将这个多项式写成“后缀表达式”的形式,接下来就是如何构造解了。 由于得到X^N那一项至少要N次乘法,得到最后的多项式也至少要N次加法,而恰好是可以构造出需要N次乘法和N次加法的表达式的,所以构造成(((0*x+1)*x+2)*x+3)…这样就是最优的了,将这个表达式翻译成“后缀表达式”就可以了。#include<stdio.h>#include<string.h>int main(){ int i, n; while(scanf("%d", &n) == 1) 阅读全文
posted @ 2012-05-09 13:33 Staginner 阅读(185) 评论(0) 推荐(0) 编辑
摘要: URAL_1001 因为数字不算很大,精度要求也不高,所以可以直接调用sqrt,否则可以用手算开平方+高精度来处理。#include<stdio.h>#include<string.h>#include<math.h>#define MAXD 300000double x[MAXD];int main(){ int i = 0; while(scanf("%lf", &x[i]) == 1) ++ i; for(-- i; i >= 0; i --) printf("%.4f\n", sqrt(x[i]) 阅读全文
posted @ 2012-05-09 12:46 Staginner 阅读(137) 评论(0) 推荐(0) 编辑
上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 85 下一页