![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
SGU
文章平均质量分 63
NightRaven
cust
展开
-
sgu 108 Self-numbers 2
一些特殊的自然数可以表示成另一个自然数+这个数每一位的数字之和。现在要求出1--N中,有多少个数不是这样的数,并且给出K个下标,求1---N中从小到大第Ki个不能这样表示的数是多少...比如 8=4+4,15=12+1+2....这些都是可以表示的,但3,5,7...这样的数是无法表示出来的。。。 这题N虽然给了1e7的大小,但O(n)跑一遍是不会超时的,恩,,这题不卡时间,原创 2013-11-18 12:06:07 · 723 阅读 · 0 评论 -
sgu160 Magic Multiplying Machine DP
坑爹dp,dp[i][j]表示前i个数是否能凑成乘积j..输出答案的时候根据当前的乘积和最近一次用到的数暴力没举出上一次的乘积...这tm都能过...... #include #include #include #include #include #include #include using namespace std;typedef long long ll;c原创 2014-01-15 01:19:15 · 643 阅读 · 0 评论 -
sgu159 Self-Replicating Numbers DFS+高精
通俗易懂的题意..给进制数B,长度n,求所有长度为n,并且平方后低n位不变的数..由于n是2000,存储的过程要用到高精...n虽然很大,但实际上符合要求的数没多少,所以直接暴力就好了,bfs,dfs都行,要注意的一点是,判断的时候如果写成n^2的高精乘法,会T掉,这里必须优化一下。事实上,只要低n位的话,我们每次添加新一位的时候只要存两个数就行,一个是这一位填多少,另一个是填上这个数后,对它高一原创 2014-01-15 16:30:15 · 682 阅读 · 0 评论 -
sgu 140 Integer Sequences 扩展GCD
两个长度为N序列A和X,有sum(Ai*Xi)≡B (mod M),先给出序列A,整数B,M,求一组可行的序列X,无解输出NO。 首先如果N为1,a*x≡B (mod M),这个式子等价与 a*x+M*y=B,显然这个式子是可以用扩展gcd求出来的。 若N为2 既,a*x+by≡B(mod M),等价于a*x+b*y+M*=B,此时首先求式子a*x+b*y=gcd(a,b),记原创 2014-01-22 19:22:06 · 734 阅读 · 0 评论 -
sgu151 Construct a triangle
三角形ABC,M是BC边上的终点,给出AB=c.AC=b,AM=m,求任意一组符合的三角形三点坐标。 首先令A为原定,B为(0,c),然后将三角形补成一个平行四边形,其一般为边长分别问b,c,2m的三角形ABA',ACA',然后通过余弦定理求出cos(角ABA'),此时画个图,根据平行线的同位角相等,会发现Cos=Yc/b,然后C的x,y就都有了... #include原创 2014-01-22 20:47:10 · 697 阅读 · 0 评论 -
sgu158 Commuter Train 枚举+二分
火车进站,站台的长度是L,火车有n个门,第1个门记为0,后面的门依次给出到第一个门的距离Di,站台上有m个乘客,每个乘客的位置为Mj,为火车停在哪个位置,可以使所有旅客到距离自己最近的门的距离之和最大,并且要保证火车所有的门都在站台长度内。因为给出的数都是整数,那么任意两个乘客的终点要么也是整数,要么是几点5,所以按0.5为步长枚举火车的位置,然后计算每个乘客到最近的门的距离,这里可以用二分查找,原创 2014-01-16 00:10:05 · 725 阅读 · 0 评论 -
sgu171 Sarov zones 贪心
一个竞赛,有K个赛区,每个赛区固定Ni个人参赛,并且每个赛区有个出线分数Qi,现共有N名选手(SUM(Ni)==N),每名选手有一个分数P,体重W,现在问,让所有出线选手的体重和尽可能大的情况下,每个选手应该在哪个赛区参赛? YY了个贪心居然能过....对每名选手按体重降序排序,对每个选手找到一个Q最大的并且满足Q#include #include #include #incl原创 2014-01-24 10:29:11 · 1138 阅读 · 0 评论 -
sgu157 Patience DFS打表
14个格子13张扑克牌(从A,2,3,4,...J,Q,K),目标状态是第一个格子放A,第二个放2...第13个放K 第14个是空白。现在如果只有最后n格的顺序不符合要求(前边14-n格已经排好),问这n格有多少种初始状态是可以通过移动牌来达到目标状态,移动的规则是,如果空格前边的牌是i,那么可以将点数为i+1的牌移动到空格位置,(i+1原先的位置现在就是空格了)。由于n最大只有13,这么小的状态原创 2014-01-17 01:15:58 · 692 阅读 · 0 评论 -
sgu 177 Square 矩形切割
n*n的矩形,由1*1的单位方格构成,先可以对其中的子矩形染色(黑或白),染色完成后,有多少个白色单位方格?第一次做这种题,第一眼看上去感觉应该是二维线段树....后来在网上查了查这类覆盖,统计的问题可以用矩形切割来写,果断学习到了新的姿势...大致思路就是倒着扫描每个矩形,处理每个矩形时,向后遍历判断后面的矩形是否与其重叠,重叠的话就分割冲若干种小的矩形继续处理,直到最后统计没有被覆盖的面积..原创 2014-01-24 20:23:59 · 1173 阅读 · 4 评论 -
sgu 148 B-Station 枚举+小根堆
放假前就看过这题,一点思路也没-..看题解都没看懂...今终于A掉了... 一个水库分为N层,每层有一定量的水W,和一个承载上限L,以及爆破本层需要的花费.如果某层的水量超过了上限,或者是被炸掉了,这层的水就会落到下一层中(记为超载)。现在一些人想要使最下面一层既第N层超载,问在花费最少的情况下,需要爆破哪些层? 现在看题解还是没看懂...不过倒是受到了点启发。首先考虑原创 2014-01-17 19:34:21 · 935 阅读 · 0 评论 -
sgu 153 Playing with matches DP+枚举循环节
n跟火柴,m+1中取法(第一中取法一定是1),两个人依次来取,取最后一根火柴的人输,但看描述的话好像就是裸的dp,i必败的情况下dp[i+step[j]]必胜,O(n*m)可出,但是这题的n是1e9,m#include #include #include #include using namespace std;const int maxn=2100;bool dp[maxn];原创 2014-01-17 01:23:08 · 705 阅读 · 0 评论 -
sgu 169 数学推导,找规律
贴个网址:http://hi.baidu.com/zyz913614263/item/478ce4dd244300ca251f40fc推导过程给的很清楚,最后只好讨论最低位的情况就行了...#include #include using namespace std;int main(){ int k; scanf("%d",&k); if (k == 1)原创 2014-01-17 21:01:26 · 674 阅读 · 0 评论 -
sgu 101 Domino 欧拉通路
题意是给若干多米若骨牌,每张牌两侧有数字,两张牌在面对面数字相同的情况下可以放在一起,求一中摆放方式..把每张牌看成一条边,连接这张牌牌两侧的数字表示的节点..这样就是一个球欧拉通路的问题了...另外注意判断一下无解,还有搜完欧拉通路后,判断一下是不是所有的边都用上了,否则就是存在不连通的情况.. #include #include #include #include #inclu原创 2014-01-19 22:56:16 · 670 阅读 · 0 评论 -
sgu 111 Very simple problem 高精开平方
给一个不超过10^1000的数n,求最大的数k使得k^2import java.io.*;import java.util.*;import java.math.*;public class aaa { public static void main(String[] args) { Scanner cin= new Scanner(new BufferedInputSt原创 2014-01-19 22:53:06 · 762 阅读 · 0 评论 -
sgu 193 Chinese Girls' Amusement
给一个N,求K满足K这里讨论一下N的奇偶性,1 N奇数, gcd(N,N-1)=1,所以gcd(N,(N-1)/2)也一定是1所以答案是(n-1)/22 N s是偶数,讨论N/2-1的奇偶性 a. N/2-1是奇数 gcd(N,N/2-1)=gcd(N/2-1,2)=1,所以答案是N/2-1 b.N/2-1是偶数,那么考虑N/2-2,gcd(N,N/2-2)=gcd(N原创 2014-01-18 22:20:37 · 776 阅读 · 0 评论 -
SGU 132 Another Chocolate Maniac 状压DP
一块N*M的蛋糕,有些位置空着,有些位置放着蜡烛,可以用1*2,2*1的巧克力来覆盖空位,问最少需要多少块巧克力,可是使蛋糕上不存在空着的1*2或2*1的区域..蛋糕的宽度最大只有7,可以状压来做。因为放巧克力时,只有当前层和下一层的状态会有影响,所以可以同滚动数组来存储状态每次扩展的时候,先判断一下当前层和上一层是否存在非法的状态(存在完整的1*2或2*1的区间),然后dfs扩展本层所有可以放置原创 2014-01-20 22:22:21 · 793 阅读 · 0 评论 -
sgu223 Little Kings 状压DP
N*N的棋盘,放k的兵,兵可以攻击相邻八面原创 2014-02-07 21:37:54 · 729 阅读 · 0 评论 -
SGU224 K皇后 DLX+打表
N*N的棋盘放K个皇后,0<=K<=n*n..之前一直没想好K皇后怎么转化成精确覆盖问题,因为它行列都不一定全部覆盖,而DLX在搜的时候,它是按照一个固定的顺序,一行一行的删除的,后来想了想,枚举到一行的时候,只要能添加一种“不放置”的选择,那么在搜完K行的时候得到的就是一组解。实现的话,不放置的选择对应一个假删除,就是只把矩阵中对应棋盘上该行的一列的列表头删除而矩阵中的内容不变,这样既没有在这这原创 2014-02-14 21:24:22 · 851 阅读 · 0 评论 -
sgu 141 Jumping Joe 扩展GCD
一维的数轴上,初始位置在原点,四种移动方式,左移a,右移a,左移b,右移b,问是否可以恰好K步移动到点P,若可以择输出一种可行的方案。 实际上就是解方程 ax+by=P,abs(x)+abs(y)=K 用扩展GCD可以求出一组解,但这组解的绝对值的和不一定是最小的,那么可以通过x+=k*b/gcd,y-=k*a/gcd来尝试收缩出一组绝对值的和最小的解,之后记录原创 2014-01-22 19:33:30 · 926 阅读 · 0 评论 -
sgu162 Pyramids 四面体面积
直接打公式就好,推导用到了海伦公式和余弦定理...备一份公式以备不时之需吧.. #include #include #include using namespace std;double slove(double a,double b,double c,double p,double q,double r){ double p1=(a*a*p*p)*(-a*a+b*原创 2014-01-14 23:08:35 · 779 阅读 · 0 评论 -
sgu 104 dp Little Shop of Flowers
这题高中做过一遍,这次又碰上了... 给m个花瓶,现在有n束花,每束花放在不同的花瓶中都会有不同的价值,问如何放置能得到最大的价值,并且要求第i束花放的位置小于第i+1束花的位置。 dp[i][j]=a[i][j]+max(dp[i-1][1----j-1]) 直接dp,记录一下上一束花的位置就可以了。dp[1][j]的值要预处理下,直接赋值成a[1][j]的就可以原创 2013-11-13 15:41:47 · 789 阅读 · 3 评论 -
SGU 103 Traffic Lights 最短路
n个点,m条边,给起点和终点,求起点到终点的最小花费,每个点都有两种状态,每个点的每种状态都有一个持续的时间,只有在某条边连接的两个点状态相同时这条边才可走。实际上就是一个带限制的最短路,每次松弛的时候,花费就是边的花费加上最少要等多长时间两个点的颜色会变成相同..如果永远无法相同,这条边就不能走了...思路很简单,时间的处理写起来比较恶心.... #include #incl原创 2013-11-13 14:42:29 · 670 阅读 · 0 评论 -
sgu 126 Boxes 数学推导(打表找规律??...)
这题太可怕了-,。。推了一下午没推出来,看了下题解,发现只要找到(a+b) /gcd(a,b) == 2^k 中k的大小就行...另外特判下n,m为0的情况....比赛的时候真遇上这种题果然还是暴力打一堆表找规律的节奏么.........证明之类的网上有,就不在这贴了... #include #include #include #include #include #in原创 2013-11-20 16:10:36 · 981 阅读 · 0 评论 -
sgu131 Hardwood floor 状压DP
先贴个连接:http://www.nocow.cn/index.php/Sgu/131 参考了NOCOW的题解...题意是要铺满N*M的区域,现在有1*2和2*2挖掉一个角 (都允许旋转)两种地砖,问共有多少种铺法..每次转移共有六种方案/*## #. ## ## #. .#.. #. #. .# ## ##1 2 3原创 2013-11-26 15:53:03 · 894 阅读 · 0 评论 -
sgu 149 Computer Network 树形dp
一棵带边权的树,对每个节点,求离这个节点最远的节点到它的距离... 两边dps,第一遍记录一下每个节点的子树当中最深和次深的深度和该深度来源节点。第二遍从父节点取出一个最长的并且不通过当前节点的最长的深度去更新当前节点的最深次深这两个值和其来源节点,然后该节点记录的最大深度就是这个节点的答案了。 #include #include #include #incl原创 2013-11-28 22:40:20 · 700 阅读 · 0 评论 -
sgu 142Keyword 枚举
给一个字符串S(长度小于50W),要求构造出一个最短的并且不是S的子串的字符串,字符集为{a,b}。 如果构造不出长度为k的目标串的话,说明S中一定包涵长度为k的所有子串的情况,那么S的长度至少就是K*2^K,想通了这个就会发现这题的答案一定小于15,那么直接枚举就行了..枚举每个长度L,遍历S的时候用一个bit[i]表示以i为结尾的长度为L的字符串的值(因为只有a,b,直接has原创 2013-11-28 22:28:36 · 624 阅读 · 0 评论 -
sgu143 树形DP Long Live the Queen
给一棵树每个节点都有一个权值,求一个权值和联通块。 dp[i]记录以i为根的子树最大的权值和是多少,遍历每个分支v的时候,如果dp[v]>0,就加到dp[i]中,否则直接跳过.. #include #include #include #include #include #include #include #include #include using原创 2013-11-28 22:34:21 · 796 阅读 · 0 评论 -
sgu 155 Cartesian Tree (poj2201) 笛卡尔树构造
这题原来做过,同poj2201..当时去学了一下笛卡尔树的构造方法..其实笛卡尔树构造完成后结构和treap是完全一样的,只不过笛卡尔树每个点的权值是事先给定的,要根据这个权值来构造树。构造的方法大体就是先按key排序,然后用一个单调栈维护这棵树最右端的链,每次插入节点tp的时候就从栈中找到最后一个a大于当前节点的节点tq,把tq接到tp的左儿子(因为key排序了,所以tq的key一定小于tp及其原创 2013-11-29 11:35:20 · 805 阅读 · 0 评论 -
sgu 172 eXam 二分图染色
按读入建图,dfs的时候,如果相邻的点已经有颜色并且和当前点的颜色相同,那么一定无解,否则染上不同与当前点的颜色继续dfs就行,注意考虑多个联通量的问题... #include #include #include #include #include #include #include #include #include using namespace std;t原创 2013-11-30 21:57:22 · 806 阅读 · 0 评论 -
sgu 170 贪心
首先统计下两个字串长度,+个数是否相同,不同肯定无解。因为每个+对应一个匹配的+,那么从左到右一个匹配一个结果肯定是最优的 (反证法搞一下应该就可以整出来吧...).. #include #include #include #include #include #include #include #include using namespace std;typedef原创 2013-11-30 22:15:39 · 671 阅读 · 0 评论 -
sgu 165 Basketball 贪心构造
先把每个身高减2,化成-0.05--0.05之间, 选择第i个队员的时候,扫描一下以i-1为结尾,长度为k(1,2,3,...i-1)的连续序列中的最大值子段和maxx,这个记录一下前i项和sum[i]就可以,每次选择一个使fabs(hei[j]+maxx)最小的身高,如果最小值还大于0.1那就无解了,否则就按这样构造到最后就可以,复杂的O(N^2),6000*6000的复杂度0.5s内竟然能过,原创 2013-11-30 22:31:18 · 729 阅读 · 0 评论 -
sgu 174 Walls hash+并查集
每个顶点hash一下,最多也就200000*2个点..每条线段连接的两个直线合并,枚举到第i条直线时,如果两段的点已经是同一个几何的了,答案就是i..无解就输出0 #include #include #include #include #include using namespace std;typedef long long ll;struct node{原创 2013-11-30 22:33:53 · 612 阅读 · 0 评论 -
sgu 175 Encoding 二分
思路没啥说的。。每次位置计算的时候有点烦,另外把二分的左端点固定到1写起来可能会比较方便... #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;int r,n,m,l,q,p,k;原创 2013-11-30 22:36:24 · 653 阅读 · 0 评论 -
sgu 187 Twist and whirl - want to cheat 伸展树(splay)
裸的区间翻转..直接写个splay就行,线段树应该也行吧.. #include #include #include #include #include #include #include using namespace std;const int maxn=130030;int pre[maxn],ch[maxn][2],size[maxn],key[max原创 2013-12-02 10:21:08 · 1153 阅读 · 0 评论 -
sgu 195 New Year Bonus Grant 树形dp
给一棵树,根节点为1,对于根节点以外的每一个节点,可以点亮该节点或他的一个儿子节点。求最多点亮的节点数*1000,以及一种可行的点亮方案。 记dp[i][0]为i不点时,i的子树中点亮的节点数,dp[i][1]为i点亮时,i的子树中点亮的节点数。初始状态除了1意外所有的dp[i][1]都是1,然后从根节点开始dfs,dp[i][1]=dp[i][1]+sum(dp[v][0],g[原创 2013-12-02 19:22:25 · 694 阅读 · 0 评论 -
sgu 199 Beautiful People dp
在网上看了个思路,按x递增排序,x相同按y递减排序..然后求一个y的最长上升序列就行..这思路太神了,因为y在x相同的组内是递减的,所以找到一个更大的时,x一定更大..由于长度有10W,求上升序列的时候需要维护一个单调栈+二分,上升序列的长度就是栈的最大深度。路径没有特殊的要求,可行的都可以,每个点记录一下上一个的位置,最后递归或者循环一下输出就可以。 #include #i原创 2013-12-02 18:01:44 · 639 阅读 · 0 评论 -
sgu 197 Nice Patterns Strike Back 矩阵快速幂
这题如果n不大的话显然是个状压dp,但n的范围是10^100...但m的范围很小,最大只有5,状态最多也就是2^5,所以可以根据m暴力构造出2^m * 2^m 的状态转移矩阵A,然后A^(n-1),统计结果矩阵中每个数的和就是答案了,但是n太大了,所以还要写个高精/2,和高精--...太烦了- -...另外当m==1的时候,直接求2^n就是答案... #include #includ原创 2013-12-03 14:03:44 · 716 阅读 · 0 评论 -
SGU495 Kids and Prizes 概率
N个奖品,每个奖品包装在盒子当中,M个人一次来抽,每次抽完后不管是否抽到奖品,都把盒子包装好放回,求送出奖品的期望值。一开始以为是个概率DP的题,怎么推也没推出来公式,后来搜了下发现是个靠想法的题...对于每个盒子,考虑它不被所有人抽到的概率,就是((n-1)/n)^m再乘个m就是就是没有被抽到的奖品数的期望了...#include #include #include #include原创 2014-03-22 00:40:42 · 711 阅读 · 0 评论