随笔分类 -  ACM——CF && TC解题报告

摘要:250pt:直接枚举跳过的位置求和即可。int n,m; int ABS(int a) { if (a p) { n = p.size(); int ans = 0; for (int i = 1; i tmp) ans = tmp; } return ans; } }; View Code 500pt:很简单的O(n^2)的DP:const int inf = 0x7fffffff; int n,m; int dp[N]; boo... 阅读全文
posted @ 2013-11-02 11:50 E_star 阅读(526) 评论(0) 推荐(0) 编辑
摘要:A:题意: 给你两个数k,d,k表示有多少位数, d表示不断的对一个数的个数为求和,最后的得到的0-9的数思路: if (k == 1) 直接输出d, if (k != 1) if (d == 0) 非法 else 输入d *10^(k - 1)int main(){ int k,d; scanf("%d%d",&k,&d); if (k == 1) printf("%d\n",d); else { if (d == 0) printf("No solution\n"); else { stri... 阅读全文
posted @ 2013-10-15 19:57 E_star 阅读(299) 评论(0) 推荐(0) 编辑
摘要:A:题意:给出一个矩阵表示蛋糕,矩阵中有毒草莓。我们每次可以选择一行或者一列来吃蛋糕,要保证改行该列不含有毒草莓。问我们能吃到的最多的小蛋糕快思路:直接枚举每一行,每一列然后吃,模拟就行。#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define CL(arr, val) memset(arr, val, sizeof(arr))#define lc l,m,rt> 1#define 阅读全文
posted @ 2013-07-21 19:16 E_star 阅读(437) 评论(2) 推荐(0) 编辑
摘要:250pt:一水...500pt:题意:给你一颗满二叉树的高度,然后找出出最少的不想交的路径并且该路径每个节点只经过一次。思路:观察题目中给的图就会发现,其实每形成一个就会存在一条路径。我们只要求该满二叉树一共包含多少个即可。注意奇数与偶数的不同,偶数要忽略第一个根节点,然后后边在+1#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define CL(arr, v... 阅读全文
posted @ 2013-07-20 16:56 E_star 阅读(490) 评论(0) 推荐(0) 编辑
摘要:A:给出a,b,c a<= b<=c <=n 求满足a^2 + b^2 = c^2 的个数。 直接暴力枚举过的。。来个优化的假设直角三角形三边为a,b,c; 则a = 2*m*n, b = m*m - n*n, c =m*m + n*n;这样我们只要枚举m,然后再枚举n, 就好了int gcd(int a,int b){ if(a%b == 0) return b; a = a%b; return gcd(b,a);}int main(){ int n; cin>>n; int top = sqrt(1.0*n); int ans = ... 阅读全文
posted @ 2013-05-14 08:26 E_star 阅读(427) 评论(0) 推荐(0) 编辑
摘要:250:简单题目:500:题意:给定一个矩形,里面要么是"v"表示,要么是".",v表示可能是g,也可能是d,如果是g的话,那么它的哈弗曼距离dis之内如果是v的话,一定是g。求有多少种满足条件的可能数。思路:将每一个块分出来,自这一联通块里面,所有的v要么是g,要么d,bfs把所有的快求出来,假设为n,则最后的总数为2^n - 1View Code #line 5 "GooseInZooDivTwo.cpp"#include <iostream>#include <cstdio>#include <cm 阅读全文
posted @ 2013-05-04 12:06 E_star 阅读(597) 评论(0) 推荐(0) 编辑
摘要:A:直接找出最小值,看是否能被所有数整除即可B:判断是否出现连续的“#”>=m若果存在肯定不能调。C:题意:两个人玩游戏(A,B),每个人分配一个字符串长度为2*n的字符串s1,s2,然后A先从[1~2*n]选一个数i,然后他就从s1中取走s1[i],然后是B从[1~2*n]中选一个还未曾被选过的数然j后取走s2[j]最后他们分别否会获得n个“0”,“1”他们可以任意组合这些0,1最后谁组合出来的数最大谁赢,若想等则平局。思路:首先分析如果出现s1[i] = s2[i] = 1的话,他们肯定会去这个“1”因为这样既保证自己得到一个1,另一方失去一个1,如果存在计数个那么最后A肯定比B多1 阅读全文
posted @ 2013-04-25 20:35 E_star 阅读(309) 评论(0) 推荐(0) 编辑
摘要:A:题意: 给出n个数,只能交换相邻两个数,问经过若干次交换后是否存在一个状态这个状态满足相邻两个数不同。思路:只要判断存在一个数出现的次数小于等于(n +1)/2就满足条件B:题意:给出两个长度为n的字符串,定义两个字符串不可比较:只要存在(1 ≤ i, j ≤ n),si > wiandsj < wj我们就说s,w是不可比较的。字符串中可能会出现‘?'表示可取0-9的任意数,问存在多少种可能使得两个串不可比较。思路:我觉得属于黑书里面分决策动机的DP,我再考虑的时候,想到面对当前i子符,状态什么? 就是比较到了第i个字符,是否出现了si >wi sj < w 阅读全文
posted @ 2013-04-18 14:46 E_star 阅读(248) 评论(0) 推荐(0) 编辑
摘要:A:直接模拟左边上去多少右边下来多少就行。B:题意:每本书都有一个厚度ti,宽度wi,每本书的高度相同,给出n本书,让你排在一起是的所栈空间最小。竖着放,或者横着放一层。如图:开始想着贪心,发现不对,一看数据量n<=100,那肯定是dp了。每本书要么竖着放,要么横着放,有点01背包的放与不放的思想。dp[i][j]表示对于第i本书,还有j个横着的空间可以放书的情况下,最小的占用空间。dp[i][j] = min(dp[i - 1][j],dp[i - 1][j + ti + wi] - ti)View Code #include <iostream>#include < 阅读全文
posted @ 2013-04-11 21:36 E_star 阅读(389) 评论(0) 推荐(0) 编辑
摘要:250pt:题意:给出一个序列,该序列中可能有相同的值,然后交换任意两个数形成不同序列的数量。思路:由于这里的序列长度为n,n <= 1000 所以我们只要利用set的蛆虫特性,O(n^2)枚举swap就可以了。但是如果n非常大达到10^7怎么办?其实我们还可以利用set来记录该序列中一共出现了多少不同的数,只要出现一对不同的数那么交换这两个肯定能够得到一个不同的序列最后结果就是(set.size() - 1)*set.size()/2;View Code #define M 5007 #define N 1007 using namespace std; int n,m; class 阅读全文
posted @ 2013-04-09 08:34 E_star 阅读(306) 评论(2) 推荐(0) 编辑
摘要:A: 求个和就行。B:题意:给定一个n*m的矩阵,将每个方格内都有一个值。我们可以选择其中的任意一个方格执行+d 或者-d操作,问最终使得方格内的数全部相同的最小不数。思路:贪心,中位数找最小值以及最大值,然后从最小值不断+d操作记录可能出现的数,知道大于最大值。然后查看一下所有矩阵中的数是否全部出现,如果全部出现,则说明一定可以得到一个所有值相同的矩阵。然后我们将所有值排序,取中位数,则中位数就是我们要得到的相等的那个值,然后计算每一个小方格到达该值的步数即可。View Code #include <iostream>#include <cstdio>#include 阅读全文
posted @ 2013-04-05 12:07 E_star 阅读(290) 评论(0) 推荐(0) 编辑
摘要:http://codeforces.com/contest/287A:水。。。B: 数学+贪心 或者 二分题意:给你k-1个如图形状的水管,他们的出水口分别为2,4,....k,只有一个总出水口,然后让你判断他们之间连接组成出水口为n的需要的最少的谁数,如果不能输出-1;开始我用数学+贪心做的,结果忘记考虑一种情况WA了。思路:首先如果k>n我们只需要选择一个即可,这里注意n可能会出现1,1是不可能出来的,就是应为这里错了。然后我们计算总数,这里能够组和出来的最多的出水口总数为sum = (k*(k - 1))/2 + 1;如果sum < n 那肯不行了,如果等于>= n那必 阅读全文
posted @ 2013-03-30 11:12 E_star 阅读(404) 评论(0) 推荐(0) 编辑
摘要:250pt:水题,直接统计矩阵中的A-Z的字符个数然后与给定的数匹配即可。500pt:话说这次的500真的不难,可是还是由于自己的粗心导致被查。题意:给你两个数A,B问最少的步数从A得到B,怎么走这样规定:可以A/10的到一个数,或者翻转A得到一个数。问最少的不熟得到B,如果不能输出-1;思路:思路很明确,如果A中包含B这个字符串,那么肯定能够得到B,否则输出-1.最少步数就是A的长度减去B的长度, 然后加上翻转的次数即可,这里翻转是关键。刚开始我没有考虑到这种情况99999 9 这种直接4步即可, 后来想了想,我们如果在A的0位置就能发现B那么只需要除10即可,否则,就要考虑反着找到B的情况 阅读全文
posted @ 2013-03-26 16:26 E_star 阅读(337) 评论(0) 推荐(0) 编辑
摘要:http://codeforces.com/contest/282A:水,找到中间的算符,处理就行。B:话说比赛的时候竟然没有想法,无语了。给出n对数,ai,bi ; ai + bi = 1000 ,求满足sa表示美对数取a的和与sb每对数取b的和之间的差值的绝对值小于等于500。对于每一对数要么取a,要么取b. 取A同A表示取b用G表示,输出最后的结果如果不存在输出-1我们只要 贪心的选择,如果选A满足就给sa,如果选b满足就给sb,这样走下来就行。View Code By E_star, contest: Codeforces Round #173 (Div. 2), problem: . 阅读全文
posted @ 2013-03-22 18:00 E_star 阅读(289) 评论(0) 推荐(0) 编辑
摘要:http://codeforces.com/contest/284A:快速幂取模,套上模板枚举就行。当时脑子乱了,竟然想超数据类型了不行啊,快速幂取模就可以解决的。B:大水题,很多人估计AB两题搞倒了。C:线段树维护区间添加,单点询问,O(Nlog(n))做。当时做的时候直接把模板弄了过来结果中间有个错误,一直调啊调,到了最后才发现,超级郁闷。View Code By E_star, contest: Codeforces Round #174 (Div. 2), problem: (C) Cows and Sequence, Accepted, # #include <iostream 阅读全文
posted @ 2013-03-20 08:32 E_star 阅读(374) 评论(0) 推荐(0) 编辑
摘要:题意:给出红,绿,蓝球的数量分别用r,g,b表示,每次执行如下操作,如果存在红球就拿出一个红球,如果存在绿球就拿出一个绿球,如果存在一个蓝球就拿出一个蓝球。当球为空时不再拿。问在第k步取出的是什么颜色的球;思路:好不容易做一次能把B题写完,感觉没错的TC结果还是因为没有考虑全面,被系统数据给击败了。哎,只能感叹自己思路还是没有那么的灵活。自己当时的处理确实也很麻烦。最后看了人家的处理感叹思路想好了代码速度其实差不多远。思路,思路.....我们只要每次取出三个数中最小的来,然后检查同时减去这些的数量与 k的关系,如果小于的话,肯定都能减去,否则就是减去k个了。这里记录第几个是什么颜色处理的很是巧 阅读全文
posted @ 2012-12-13 16:42 E_star 阅读(370) 评论(1) 推荐(0) 编辑
摘要:http://codeforces.com/contest/237A:确实是水题,不过本人脑残,叫了四遍才对,第一遍读错题意些错了,第二边忘了去重定向,第三边去了重定向忘了保存(因为交的文件吗),四边忘掉了break。终于第五边对了。无语了。。粗心啊。。就是统计以下时间相同(同时到达咖啡店的人多少个即可)B:题意:给定一个有n行,每一行有ci个数的矩阵,求如何交换两个数使得矩阵满足a[i][j] > a[i - 1][j] && a[i][j] > a[i - 1][j]。思路:分析可知,如要满足条件我们只要将矩阵转化成一维的数组,使交换后的数组满足递增即可。开两个 阅读全文
posted @ 2012-10-26 22:03 E_star 阅读(234) 评论(0) 推荐(0) 编辑
摘要:255pt:题意:给一个01矩阵,要求改变一行和一列是它的总和最大,求最大的总和,枚举行列,然后取抑或O(n^3)做即可;#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <queue>#include <stack>#include <set>#include <map>#include <string>#define CL(a 阅读全文
posted @ 2012-09-07 21:26 E_star 阅读(291) 评论(0) 推荐(0) 编辑
摘要:很长时间没做TC了,再说自己做的也确实相当少,所以不是很熟+思路来的比较慢所以做得不是多么好,只做出了250pt,500pt的思路对还没敲完就结束了。话说TC,CF什么的真的很锻炼人的思维能力可就是老在晚上举行,所以弄得....250pt就是求一个x + z = d;2*x + 4*y + 4*z = f;y + z = t;推出公式计算即可:500pt题意:给定你一个序列,里面含有一个-1其余都是非负数另开一个栈,按如下操作进行:遇到大于0的进栈,遇到0取栈顶两个元素相加再放进栈,最后得到栈顶的元素为wantresult.给出序列和wantresult,问-1这个位置如果是0就输出0,如果是 阅读全文
posted @ 2012-08-25 20:41 E_star 阅读(217) 评论(0) 推荐(0) 编辑
摘要:250pt: 题意是给定一个正六边形,在正六边形内划三条不相交的线将其分成四个三角形,求最小的三角形的面积。果断地在推公式的时候把变量当做常量带入,所以致使公式推错。纠结了好久的。划分出来的四个三角形面积都是固定的,推公式计算最小就好了。 s = (sqrt(3)*L*L)/4;500pt:自己没想出来,dp的一道题目;有n个柱子在一条直线方向排列,每个柱子i的高度的取值范围是[1,height[i]],若用一条绳子将每个柱子的最顶端连接起来(共形成n-1段),求所用绳子的最大长度。dp[i][0]表示当前柱子i取最短1,dp[i][1]表示当前柱子i取最长height[i];状态转移方程: 阅读全文
posted @ 2012-06-27 18:46 E_star 阅读(355) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示