- 博客(21)
- 收藏
- 关注
原创 codeforces 271D Good Substrings
题意:已知26个字母的好坏,要求从给出的一个字符串中找出满足条件的子串数。【子串需满足:其存在的坏字母数最多只有k个】思路:字符串哈希/trie树WA代码:#includeusing namespace std;typedef long long ll;typedef long double db;typedef pair pii;typedef vector vi;
2018-03-02 00:17:14 296
原创 codeforces 363c Fixing Typos
题意:对于一个给定的字符串,定义字符串中的typo为:1.连续出现三个相同的字符 如aaa2.连续出现两组 每组两个相同的字符 如aabb问最少去掉多少个字符后,能让字符串中不出现typo串。思路:贪心地从前往后检测并去掉typo串,出现一个去掉一个即可。代码:注意写法。#include<bits/stdc++.h>using namespace std;typedef long ...
2018-02-24 18:51:33 206
原创 cf257c
题意:给出平面坐标一堆点,找一个最小的角度【0,360】,使得所有的点包含在这个角内/上。思路:对这些点极角排序后,判断两个点与原点构成的角度a,360-a就是覆盖所有点的角,循环一次找最小值即可。注意:1.求两个向量的旋转角:可以用atan2()求出与x轴正半轴的夹角【-180,180】,然后因为排序后角是升序,所以可以后-前得到两个向量的旋转角,注意最后一个点a[n]和第一个点a[0]比较时需...
2018-02-16 23:08:22 445
原创 CodeForces - 294B Shaass and Bookshelf
传送门题意:N本书放到书架上。每本书有厚度t(1或2)和宽度w。问怎么放书才能让书和书架底面接触的边 厚度最小(示意图见原题)。思路:一开始是想贪心做的,假设每本书厚度相同,我们一定首先把宽度小的放在上面。所以 先把所有书放在下面,然后把书按宽度/厚度 比排序,之后优先把比值小的放在上面,结果会wa;后来发现是因为不能简单通过比例确定不同厚度书之间的先后关系。如:4 1 2 2 11 2 11 2...
2018-02-13 10:58:30 295
原创 CodeForces - 300A
题意:给出N个数,要求把它们分到三个集合中,使三个集合所有元素的积分别满足:小于零;大于零;等于零。题目保证有解。思路:题目保证有解,说明每个集合元素都至少有一个,而且我们可以得知,至少有一个负数和一个零。所以这样构造:1.只放一个负数到第一个集合。2.正数放到第二个集合中,保证第二个集合有元素。3.如果负数还剩奇数个,就把一个放到第三个集合中,剩下的偶数个负数放到第二个集合中; 如果负数还...
2018-02-12 12:15:41 171
原创 cf294c Shaass and Lights
传送门题意:给一串n个灯,有m个灯初始是亮的,并给出初始亮的灯的序号。每次操作能点亮靠近亮的灯的一盏灭的灯,问点亮所有的灯有多少种方案。想法:看上去有点像一道全排列的题目。但是开灯是有特殊规则的。对于一盏灭的灯只有他两旁有亮的灯的时候才能开。所以只要把有特殊选法的段挑出来选,然后这一段内部的选法按照题意选即可。1.对于一串连续灭的灯,点亮的方案只能是从两端往中间,方法数是2^(L-1)种,而不是A...
2018-02-12 01:26:23 354
原创 cf300B
传送门题意:有n个人要组三人小队,有m个要求,每个要求提到的两个人要在一个小队。问对于给定的人数和要求,是否能按要求组队,如果可以,给出组队方案,如果不行就输出-1.思路:通过并查集解决,把需要组在一起的人用并查集合并。记录每个并查集老大名下有的人。对于每个组 1.如果人数超过3个就输出非法 2.对于每个不够3个的零散组,遍历可用的其他零散组 合成一个3人组。如果不能形成三人组的情况存在,就输出非...
2018-02-12 00:56:13 183
原创 poj 2251 Dungeon Master
题意:给出一个三维迷宫,以及起点和终点。单位时间可以往上下左右前后走一格。询问从起点到终点的最短距离(可能不存在)。思路:二维最短路的升级版,bfs搜索最短路径即可。实现时可以用pair结构记录相互关联的几个数据。代码://#include<bits/stdc++.h>#include<stdio.h>#include<stdlib.h>#include&...
2018-02-10 00:07:07 209
原创 poj 1321 棋盘问题
题目描述:n为正方形棋盘一维长度,k为需放置的棋子数,在放置棋子时,任意两个棋子必须不同行不同列。给出n,k以及棋盘形状,求放置k个棋子的方案数。思路:有点像八皇后问题,需要dfs解决。dfs的重点是如何简化搜索,防止重复计数。一开始没有考虑复杂度,重复搜索方案,最后结果除以对应组合数,会超时而且可能爆int。为了保证一种情况只被搜到一次,我们需要确定搜索的合适的序,达到在多维空间
2018-02-09 21:34:00 227
原创 cf446 div2
B 题意:A[]中 第i人可以干掉i前连续A[i]个人,若每个人同时干掉敌人,问最后剩下几个人。题解:从后往前扫一次,依次比较当前位置能杀死的最靠前的人位置 和 之前的人能杀死人的最早位置,O(n);#includeusing namespace std;typedef long long ll;typedef long double db;typedef pair pii
2018-02-04 19:01:07 600
原创 AtCoder Beginner Contest 082
B - Two Anagrams 题意:给两个字符串a,b,每个字符串中字符的位置可以自由改变,问是否存在一种排列使a的字典序小于b的字典序。 题解:贪心,a从小往大排,b从大往小排,看是否存在a #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long doubl
2017-12-17 11:51:23 380
原创 AtCoder Beginner Contest 081 D
D Non-decreasing 题意:给N个数,有操作f(a,b) 把第a个数的值加到第b个数上。求一个小于2N的操作序列,使给出的序列变成非递减序列。 题解:当序列为非负序列时,通过a[i+1]+=a[i]构造; 当为非正序列时a[i]+=a[i+1]; 所以先用N个操作(加绝对值最大的数)变成非正/非负序列,然后按照上面的构造方法构造即可。 注意边界。 #include<bit
2017-12-17 11:16:02 206
原创 AtCoder Beginner Contest 081 C
C - Not so Diverse 题意:N个数 选K种值相同的数留下 ,问做多需要删除几个数思路:开MAP存一下不同种类的数,数量从大到小排序,然后贪心地cnt从小到大开始删。
2017-12-17 11:00:54 255
原创 遗传算法 练习
一、 实验目的1. 熟悉和掌握遗传算法的原理、实质。2. 学会使用遗传算法解决问题。3. 学会编写遗传算法程序寻找函数最值。 二、 实验内容 1. 用遗传算法解决下面函数的极大值问题。 参数设定可参考如下:种群大小M=10交叉概率 pc=0.6变异概率 pm=0.02迭代次数最多为100。 三、 算法实现 #i
2017-11-30 00:19:49 937
原创 John’s Inversions 2011-2012 ACM-ICPC, NEERC, Northern Subregional Contest
题意是给N张牌 每张牌上有两个不同颜色的数字 (有序) 求一种排列方式使同种颜色的数的逆序数对最少。思路:假设 对 逆序数对较多的颜色的牌排序,使得一种颜色的牌的逆序数达到最小,另一种颜色的数字会存在一些逆序数对。不存在更优的移动方式,使得另一种颜色减少的逆序数对大于已经有序的颜色增加的逆序数对。实现:用归并排序求逆序数对。 AC代码:#include bits/s
2017-08-21 00:05:38 328
原创 Heavy Coins codeforces
第一行输入硬币数N和需要付的钱K 然后下一行输入每个硬币的面值。题意是 尽量多给硬币,看最多能给几个硬币。(给的钱可以超过目标金额,但是要保证不会凭空多给硬币。比如目标金额11元 你给了2 7 4 三枚硬币。 2元是可以找回的 ,所以不能这么给。)一开始想到贪心。从小的开始给,就能尽量多给。然后钱给超了之后就折返回来,从大到小收回硬币,看看收回这一枚硬币后是否剩下的钱够不
2017-08-03 23:03:30 282
原创 Trace CodeForces - 157B
asdf给出N个同心圆 最外面的环形为红色。然后每个环形蓝红相间。求红色部分的面积.#include #include#include#includeusing namespace std;int cmp(int a,int b){return a>b;}int main(void){ int a[105],i; int n; double square=0; ci
2017-07-26 19:58:21 309
原创 Game Outcome CodeForces - 157A
给出一个矩阵 求满足条件的格子数。条件是这个格子所在列数字的和严格大于其所在行的数字的和。思路 用两个数组记录格子每行 每列的和 ,然后遍历一次格子,比较并计数即可。#include#include using namespace std;int a[35][35];int sumrow[35];int sumcol[35];int main (void){ in
2017-07-26 19:56:39 263
原创 Literature Lesson CodeForces - 139C
题目比较长 大概意思是 多组样例每组第一个数字是小节数n 4行单词一个小节 第二个是第几个元音k(从单词结尾往前面数)接下来是4*n行 如果一个小节的4个单词从第k个元音到单词结尾都一样 那这个小节就是aaaa型 第一个和第三个一样 第二个和第四个一样就是abab型 同理还有aabb行 abba型 否则就不是韵文。如果给出的所有小节都有同样的类型(aaaa可以看成
2017-07-26 19:35:42 288
原创 CodeForces - 139A Petr and Book
题意:输入一本书的页数和周一到周末每天看多少页,求看完的那天是星期几。ExampleInput 10015 20 20 15 10 30 45Output 6Input 21 0 0 0 0 0 0Output 1#include#include using namespace std
2017-07-26 09:44:00 423
原创 【新手入门】C++中的一点问题
在函数中用宏定义的itemNum 结果和在主程序中用不一样 在查找函数中一直都是1 主程序中是正常值数组定义在了主函数中 函数也用了引用。。。#include #define itemNum(a) sizeof(a)/sizeof(a[0])//顺序查找:在数组int a[n]中查找值val//返回true(找到)或false(没有
2016-05-15 15:11:42 331 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人