随笔分类 -  基础&模拟

摘要:http://codeforces.com/problemset/problem/317/A题意:给两个数字,可以两数相加去替换其中一个数字。问要做多少次,可以让两个数字钟至少一个 >= 目标数字m,输出次数,不可能的话输出-1比较简单的题目,用来练习JAVA,代码写得有点,呵呵................import java.util.*;public class Main{ static long max(long x , long y){ return x > y ? x : y; } static long solve(long a ,long b ,l... 阅读全文
posted @ 2013-06-18 13:52 Titanium 阅读(472) 评论(0) 推荐(0)
摘要:构造类问题,打表找规律题意:输入n,生成一个n的全排列a,生成一个n的全排列b,从第1位到第n位,每个位上的对应的(ai+bi)%n=ci,然后得到n位的序列c,看看c是不是也是一个n的全排列,是的话就成功了,输出。如果无论怎样都找不到合适的a和b去构造出c,那么就输出-1这题一想通了,仅是那么的水,但是自己还是很长时间去思考说说思考的过程1.很容易想到,题目是想我们我们构造一个合适的a,b,进而产生合适的c,虽然题目让我们输出任意一个合法的排列就可以了,但其实要我们找的不是排列方案,而是匹配方案试想一下,如果手头上有合适的一个排列,那么我们把对应的ai,bi,ci捆版在一次,我们完全可以对这 阅读全文
posted @ 2013-06-11 12:41 Titanium 阅读(528) 评论(0) 推荐(1)
摘要:http://codeforces.com/contest/305/problem/B数学,模拟题意:略这题,可以按照后面Hint那样逆回来模拟,但是long long会溢出,case 40#中的溢出,让人没了脾气,刚好溢出又刚好能输出YES,所以就正着模拟,可以避开溢出问题,但是要注意一点为了叙述,我们就举n=2的例子对于等式可以写成 a1 + (1/x) = p/q , 如果它们相等,那么我们先算出 p / q的整数部分 Int = p / q (计算机做除法自动取整)若Int < a1 , 那么这个等式是不可能相等的,一定是左边大若Int > a1 + 1 , 那么这个等式是 阅读全文
posted @ 2013-06-09 23:14 Titanium 阅读(494) 评论(0) 推荐(0)
摘要:http://codeforces.com/problemset/problem/315/B数据结构?这题比赛时想到了线段树,后来发现错了,确定是数据结构方向的,一直想,想了可能有20分钟的样子,觉得可以水过去,然后就去水,然后过了,赛后这题被归为数据结构,但是觉得这个分类有时候真的不太靠谱,不知道数据结构到底怎么写,但是看别人的代码,水过去的做法更多题意:3个种操作1 x val ,把数组下标x的元素的值改为val2 val , 把整个数组每个元素的值都增加val3 x , 查询下标x的元素当前的值问题的关键是修改某个单元的值,试想2操作做了好几次,即整个数组的值加了好几个值,这时候执行1操 阅读全文
posted @ 2013-06-08 12:09 Titanium 阅读(318) 评论(0) 推荐(0)
摘要:http://codeforces.com/problemset/problem/289/B水题。。。。。睡觉前水一下题意:给一个矩阵和一个值D,矩阵内每个元素可以多次加减D,目的是让整个矩阵的元素都变得相等,如果做不到输出-1想了一下,觉得好像挺水。。。。。首先,矩阵是多余的,直接一个数组就行了,无非是让数组元素都相等对于两数字A,B,如果它们的差值不是D的倍数,那么无论它们怎么加减都没办法变得一样,只要一对数字不行,整个序列就失败了对于两数字A,B,它们的差值是D的倍数,例如kD,那么他们可以变为相等,要变相等的最小次数就是k,变换方式很多,小的变成大的,大的变成小的,两者都往中间值靠拢, 阅读全文
posted @ 2013-05-24 23:18 Titanium 阅读(497) 评论(0) 推荐(0)
摘要:训练的题目模拟题,蛇形矩阵,保证是n*n的矩阵,并且n是奇数 , 在矩阵中填数,从最中心开始填,逆时针转圈,1,2,3…………n*n。输入n,表示矩阵的大小,输入一个数字m,找出m在矩阵的哪行哪列其实这个蛇形矩阵可以分为一圈一圈来看,要找m,可以先确定它在哪一圈每一圈都值的范围是 [ k^2+1 , (k+2)*(k+2) ] ,其中k是奇数看一圈的四个角,右上角最大: max = (k+2)*(k+2)左上角次之: max - (k+2) + 1左下角再次: max - 2*(k+2) + 2右下角 : max - 3*(k+2) + 3所以可以以这4个值作为一个范围,将这个圈分成4份,.. 阅读全文
posted @ 2013-04-30 20:31 Titanium 阅读(219) 评论(0) 推荐(0)
摘要:地址:http://codeforces.com/contest/200/problem/C模拟题题意:模拟足球小组赛的排名变化。规定只有4个球队,我方球队为BERLAND,一定会有的,然后另外3个球队的名字不一定。4个球队,两两球队间打且仅打一场比赛(所以可以知道一共是打了6场)。输入中给出5行,即5场比赛的信息,还剩下一场的信息没有给出。保证最后一场一定是BERLAND打某个队的,对手是谁要找出来(这个不难),而且也规定这场比赛一定是BERLAND胜利。你的任务是,要令BERLAND在这场比赛后,排在第1名或第2名,满足这个条件下,这场比赛的净胜球数最少,如果净胜球数一样,要令对方的进球数 阅读全文
posted @ 2013-04-27 22:22 Titanium 阅读(488) 评论(0) 推荐(0)
摘要:暴力+模拟题意:一行字符串没有空格,是一个加法或减法算术表达式。数字中有大写字母,大写字母代表了某个数字,一个字母只能代表1种数字,不同字母代表的数字不同,另外允许存在前导0,另外字母总数最多10个。另外题目中说第1个数字要大于等于第2个数字,所以我做了判断,然后wa了一个早上+一个晚上,注释掉就AC了很无语。。。。另外答案可能有多种,任意一种都可以的,至少我的代码是这样,并且保证是有解的。另外这题网上找不到题解的,确实我也觉得这题很无聊。。。但是选拔赛的时候,居然想成了拓扑排序(因为做过类似的,又一次被驴舔了)说说做法吧因为字母最多十个,所以就暴力枚举,可想而知枚举量最大是10!,枚举后就把 阅读全文
posted @ 2013-03-28 23:14 Titanium 阅读(310) 评论(0) 推荐(0)
摘要:枚举子集+模拟2012国赛简单题。题意有n*n的点,有一些点是空地可以放稻草人保护稻草,稻草人有保护范围,就是距离为r的曼哈顿距离。问要保护所以的草最少要多少个稻草人,输出最少个数,如果全部放入都不能全部保护则输出-1这题有坑,不过代码写得好的话,坑是可以避免的,不需要特判。1.可以能一个空地都没有即不能放稻草人,所有稻草都无法收到保护,输出-1。2.所有点都是空地,全部放稻草人,这样的话答案是0,因为根本没有草不需要保护。2.注意一点,我就是为此WA了好多次,空地是不需要保护的!比如枚举了放置的稻草人并把受保护的点染色为1,如果有些点为0,并不一定是失败,可能那个点是空地,虽然它没有放稻草人 阅读全文
posted @ 2013-03-18 13:01 Titanium 阅读(443) 评论(0) 推荐(0)
摘要:数学题(我更觉得是恶心模拟)题意很清楚,就是给一个高精度整数,求它的平方根,数据保证一定是整数解这个东西要用高精度各种搞(看过别人的报告说有些不用高精度,没心机看下去,自己硬是写了一堆高精度),主要就是模拟手算的方法手算的方法这里说得很清楚了(希望看得到图片吧)开根方法笔算开根法: 例1:求①将37625从个位起,向左每两位分一节:3,76,25②找一个最大的数,使它的平方不大于第一节的数字,本题中得1(1的平方为1,而2的平方为4,大于3,所以得1).把1写在竖式中3的上方。③将刚才所得的1平方写在竖式中3的下方,并相减,然后将76移写在本行(如图)④将前面所得的1乘20,再加一个数a,写在 阅读全文
posted @ 2013-02-02 21:37 Titanium 阅读(1311) 评论(0) 推荐(0)
摘要:水题(不知道归在哪一类)无意间看到的一题…………觉得比较水有比较无聊就AC了,本来想写二分的后来发现没必要,就一个线性扫描过去即可从大到小排序,每次在两堆糖果里面轮流取,其中一堆取完后就取接下来的那一堆,取到最后结束。看最后剩下多少个糖果,<2成功,否则失败从小到大排序是不行的#include <cstdio>#include <cstring>#include <algorithm>#define N 1000010using namespace std;int a[N],n;int cmp(int p ,int q){return p>q?1 阅读全文
posted @ 2012-12-25 19:00 Titanium 阅读(187) 评论(0) 推荐(0)
摘要://银行客户平均等候时间//要算等候时间和算逗留时间是不同的//t1[i]表示第i个人的到达时间,t[i]表示第i个人办理时间,t2[i]表示第i个人离开时间,time[i]表示第i个人的等候时间//我们要算平均等候时间,其实就是time数组累加求和然后除以n即可//对于第1个人,他不需要等待,来到就办理,所以等待时间为0//对于第i个人,如果他来到的时候第i-1个人刚刚离开或者已经离开,那么他也不需要等待直接办理,他的情况和第1个人是一样,等待时间为0//即time[i]=0;//如果第i个人来到,但是第i-1个人还没有离开,那么他就要等待,他的等待时间是(第i-1个人的离开时间-第i个人的 阅读全文
posted @ 2012-10-13 00:22 Titanium 阅读(1432) 评论(0) 推荐(0)