摘要:
UVA_11361 首先,因为各个数位上的数字之和是不会大于100(我没有精确计算)的,那么K给这么大其实是唬人的,就当成K是小于100即可,大于等于100的情况可以直接输出0。 我们不妨先计算出小于等于B中有多少是满足要求的,再计算出小于等于A-1中有多少满足要求的,两者做差即可。比如现在计算小于等于B中有多少是满足要求的,在计算的时候可以用f[i][j][k]表示递推到了左起第i位时,数位上数字和模K为j,数本身模K为k的数中小于B的数一共有多少个,接下来如果采用刷表法的话,会有两部分需要考虑,一部分是当前本来就比B小,那么第i+1位是什么都无所谓,直接将f[i][j][k]累加到对应的f 阅读全文
摘要:
UVA_11806 这个题目直接计算不大好算,但是反过来去计算不符合要求的局面则容易很多。 我们不妨设A[i]表示我们规定其中i条边上不能放,而其他的地方随便放,所得的一个结果(比如i=2,我们要枚举是哪2条边没有放,然后其他地方随便放,可以用组合数求得结果,最后将每次枚举所得的结果加起来作为A[2]的值)。再设a[i]表示有且仅有i条边上没有放的情况数(比如i=2,同样是枚举哪2条边没有放,最后C(4,2)种枚举所得的情况之和才是a[2]的值)。 我们想要的显然是a[1]+a[2]+a[3]+a[4],这就是所有不符合要求的情况,但是同样不好直接计算,但是A[i]却很好计算,我们只要枚举哪些 阅读全文
摘要:
UVA_12508 这个题目的一个坎就是要想到去枚举三角形的外接矩形,如果想到这一点的话剩下的思路就不难想了,分情况计算出各种三角形(当然这些三角形的外接矩形必须是枚举的这个矩形)的数量然后再乘以大矩形中有多少个这样的外接矩形,这样一种外接矩形的情况就算是算完了。所有外接矩形的情况累加起来就是最终的结果了。#include<stdio.h>#include<string.h>#include<algorithm>typedef long long LL;int N, M, A, B;LL deal(int limit){ LL ans = 0; for(in 阅读全文
摘要:
BZOJ_1776 本来以为是个树的分治的题目,结果balabala敲完之后跑了8s多,大概是N*logN*logN的复杂度……比较好的办法还是转化成LCA问题,具体思路可以参考这篇博客:http://hi.baidu.com/edward_mj/item/2b46d4330c23edc61b9696c2。#include<stdio.h>#include<string.h>#include<vector>#include<algorithm>#define MAXD 200010#define MAXM 400010#define INF 0x 阅读全文