脑洞
文章平均质量分 62
johsnows
正在静下心来学算法的acmer
展开
-
2020kickstartC_C perfect subarray
题意:给定一个数组a,求有多少个子串和是平方数,-100<a[i]<100。解题思路:因为a的长度是1e5,a[i]<=100,所以平方数小于sqrt(1e7),只要枚举下平方数就行。遍历a数组,求以i结尾的子数组,有多少个是平方数,(本题因为a[i]存在负数,没法用双指针)设前缀和为sum[i],就是求有多少个j满足sum[i]-sum[j-1]为平方数,假设当前枚举的是平方数s[k],即求有多少个j满足sum[j]=sum[i]-s[k],所以只需要在遍历的时候统计下.原创 2020-05-30 19:09:32 · 192 阅读 · 0 评论 -
codeforces 897 D Ithea Plays With Chtholly(交互)
题意:每次给你一个数,让你放到一个长度为n 的数组里,直到这个数组填满并且是不递减函数为止。需要 在m步内完成c是给出的数的范围。解题思路:一种显然的暴力方法就是从1开始扫描,遇到第一个大于x的或是a[i]==0的就放。但是还有显然的卡掉这种暴力的做法,就是把数n-1逐个给出,就每次要替换,这样的话就需要n^2次,显然不行。所以应该能想到从两边,开始扫描,让大于c...原创 2017-12-03 15:51:41 · 580 阅读 · 2 评论 -
atcoder Yet Another Palindrome Partitioning(dp)
题意:给出一个字符串,最少需要多少次拆分得到的子串都是合法的,合法的定义是改变字符串顺序能得到一个回文串。解题思路:容易想到的是一个合法的字符串的26个字母最多只能一个字母出现次数为奇数,用26位二进制数(mask)表示,1表示奇数的话,只有能整除2的和0是合法的。dp想法是每个状态减去一个合法串然后转移过来,但是显然不能for一下,这时候就利用下上面的mask。用ma原创 2017-10-23 19:21:10 · 424 阅读 · 0 评论 -
Codeforces 388B Fox and Minimal path(构造最短路条数为N的图)
一道cf好题。转自:http://blog.csdn.net/yasola/article/details/52386132题目大意: 输入一个数字N,构造一个最短路径数为N的图,以邻接矩阵的形式输出。解题思路: 开始想的是因数分解,不过这样对于非常大的质数会超过1000个点的限制。后来在吃饭的时候灵光一闪想到的正确的方法转载 2017-08-16 18:09:21 · 402 阅读 · 0 评论 -
Atcoder agc018 coins
题意:x+y+z个人,每人有a,b,c三种硬币若干个,只能从每个人手上拿一种硬币,其中能拿a种硬币最多x个人,b种y人, c种z人,问最多能拿几个硬币。解题思路:先对每个人按a-b的大小排序,这样的话,选择a的x人一定都在选择b的y人右边,假设存在选择a的人在选择b的人左边,那么原先拿a的拿b,原先拿b的拿a,获得的金币数量要比原先多。现在可以枚举下,y人是在前k人中选取,原创 2017-07-24 20:17:32 · 628 阅读 · 0 评论 -
codeforces 707 D Persistent Bookcase(dfs+bitset)
题意:对一个n*m的01矩阵进行操作。第一种操作是将x行y列的数置1.第二种操作是将x行y列的数置0.第三种操作是将x行的数取反。第四种操作是将矩阵回到第x次操作后的矩阵。解题思路:说是可持久化数据结构,我最近又刚刚学了主席树,就真的被骗去写可持久化了,然后还没有写出来QAQ。其实这个题目由于n,m小于1000,本身操作消耗的时间很短,所以不需要可持原创 2017-07-20 16:26:52 · 257 阅读 · 0 评论 -
codeforces 287 C. Lucky Permutation
题意: ppi = n - i + 1.构造一个1到n的序列满足该式子。解题思路:观察一下可以发现四个为一组。如:2 4 1 3Pp1=P2=4-1+1=4Pp2=P4=4-2+1=3Pp3=P1=4-3+1=2;Pp4=P3=4-4+1=1;1和4的位置对应到3和2的位置,满足四个为一组的能构成,如果多一个也可以,放在最中间Ppi正好等于自己也原创 2017-06-15 15:21:18 · 317 阅读 · 0 评论 -
codeforces 794 D Labelling Cities(脑洞)
题意:一个图有n个点,m条边,保证整个图连通,问能否构造出一种权值,使得两个点之间权值差小于等于1当且仅当两个点有边相连。解题思路:其实感觉想法应该都是有的,但是很难整合出来,在几个点之间不互相连接的前提下,一个点如果连接其中超过2个点,肯定就不能构造出这样的权值。然后比较难想的就是可以把相邻的点集合(包括自己)相同的点的权值都赋值为相同,但是知道了这个后是很容易想通的,因为他原创 2017-05-16 11:32:55 · 801 阅读 · 0 评论 -
codeforces 765 D Artsem and Saunders(构造)
题意:给一串1到n的数,以及映射f[n],问能否找到一个m,构造出映射g: [n] → [m],h: [m] → [n],使得g(h(x)) = x对于所有的m成立,h(g(x)) = f(x)对于所有的n成立解题思路:一个长度为n的序列映射到长度位m的序列还要映射到另一个长度位n的序列,n与m不相等,要满足题目中h(g(x)) = f(x)的条件的话,假设m经过x→g(x)→原创 2017-02-14 21:28:39 · 511 阅读 · 0 评论 -
zoj D friends (脑洞+队列)
题意:有一群人,给出一些朋友关系,如果两个人有不少于k个共同朋友,那么他们也能成为朋友,问有多少人能成为新朋友解题思路:设num[i][j]记录i和j之间有多少个共同朋友,我们去枚举每个人,将每个人的所有朋友xi,num[x[i]][x[i+1]]++,最后去判断有多少个num[i][j]>=k,用队列去记录,让他们成为朋友,然后再把队列里记录的这些新朋友相关的num[i][j原创 2017-02-14 11:28:14 · 365 阅读 · 0 评论 -
codeforces 755 d PolandBall and Polygon(找规律)
题意:给一个凸n边形,给定一个数字k,保证gcd(n,k)等于1,每隔k个点连一条线,问每连一条线凸多边形被划成多少块。思路:容易得出,每次画一条线,它所多划分出来的块数就是它穿过的线数加一,而它所穿过的线的数量就是这条线连接的两个点之间,已经有线连接的点的数量乘2.例如在2和4之间连 一条线,2和4之间3已经被连接了,所以2和4这条线穿过的线的数量就是1*2。但是原创 2017-01-16 13:19:18 · 726 阅读 · 1 评论 -
UVALive - 6582 Magical GCD (脑洞)
题意:给一个数列,定义Magical GCD为序列gcd*序列length,问数列中子序列最大Magical GCD是多少.解题思路:定义i,j,i为长度,j去遍历i之前的数,逐步求GCD更新最大值,这种做法的时间复杂度是 n^2,这样暴力求肯定是超时的.但是我们可以从这个思路去优化,我们会发现在逐步往前求GCD的时候,可能我们会连续的求出一些相同的GCD,这些相同原创 2017-02-20 16:11:24 · 535 阅读 · 0 评论 -
cf 759 A Pavel and barbecue
题意:给一个序列,序列值代表对应下标下一秒硬币要移动到的下标,再给一个相同01序列,1代表在这个位置下一秒硬币翻转。问需要修改几次这两个序列使得每一枚硬币经过若干秒后能以正面和反面的姿态都经过过每一个点。解题思路:之所以需要修改是硬币的移动位置会形成循环,而这个循环有可能不是全局的,是分成几堆硬币内部循环,我们需要找出这样硬币的堆数,如果堆数是一那么正好不用改,如果大于一就需要原创 2017-02-07 14:43:39 · 376 阅读 · 0 评论