08 2012 档案

摘要:题意:给出n个点和m条边<边是蓝色或者红色>的信息..问能不能组成一棵有k条蓝边的树..思路:求出尽量多地加蓝边可以加多少条..bl然后求出尽量多地加红边可以加多少条..re如果k是在bl和re间就是1 否则是0Tips:可以用kruskal也可以之间建树..Code:View Code 1 #include <stdio.h> 2 #include <cstring> 3 #include <cmath> 4 #include <algorithm> 5 using namespace std; 6 #define clr(x) m 阅读全文
posted @ 2012-08-30 19:09 Griselda. 阅读(188) 评论(0) 推荐(0) 编辑
摘要:题意:给出了n个数..给m个询问..问在询问范围a, b内从右到左第一个出现重复的数..思路:用map求出离这个数最近的相同的数的位置..然后用rmq求出范围内位置值最大的那个~如果那个位置不在给定范围内或者最大值就是0..代表范围内没有重复的数~就输出OK..否则输出那个数..Tips:用一个数组保存输入的值..最后就可以根据求出的最大位置..找到这个重复的数..Code:View Code 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define clr(x) ... 阅读全文
posted @ 2012-08-29 23:37 Griselda. 阅读(315) 评论(0) 推荐(0) 编辑
摘要:题意:给出猪圈个数 m 和买家人数 n然后给出m个猪圈的猪的头数..接下来 n 行..给出mm a1 a2 .. a(mm) k 例如 2 1 5 3 表示第i+1个用户 有mm(2) 个猪圈的钥匙 就是有第 a1(1) 个和第 a2(5) 个猪圈的钥匙..还想要买得k头猪..问最多能够卖出多少头..思路:其实就是最大流~唯一有趣的是建图的过程../************************************/建一个超级源点0..超级汇点n+1以客户作为节点..超级源点根据第一个拥有猪圈的客户和超级源点连线..容量就是第一个客户累计可以得到多少头猪..因为第一个打开猪圈的客户可以取 阅读全文
posted @ 2012-08-28 22:39 Griselda. 阅读(962) 评论(0) 推荐(1) 编辑
摘要:题意:给出order数n给出n行order<3种>第一种:travel A m a1 .. ai .. an表示来了同学A 其中知道m个信息 信息号为a1 .. ai .. an..第二种:share A B表示 A和B同学分享了她们共有的信息..其中信息可传递..并且和share先后无关..第三种:check A 表示问A同学知道了多少条信息思路:用map<string, int> 来让同学名字变成序号..用set来对信息去重..用并查集使资源共享~<可节省内存~>用set里面的size可以求的根节点的大小~即share后掌握的知识点..Tips:set里 阅读全文
posted @ 2012-08-26 21:38 Griselda. 阅读(737) 评论(0) 推荐(0) 编辑
摘要:题意:给出n表示geeks人数..也是位置总数..给出a1 a2 .. ai .. an 表示第 i 个人想要坐从左往右第 ai 个空位..给出m表示询问的个数..给出m个数b1 b2 .. bi .. bn 表示询问第 bi 个人的位置..思路:如果模拟过程..应该是先按要求排好位置..然后输出位置值..排好位置的过程就用到了二分..用树状数组表示当前位置前有多少个空位..然后二分找出满足当前位置前面空位有 ai 个的位置..Tips:记得安排好第i个geeks的位置后要modify树状数组..Code:View Code 1 #include <stdio.h> 2 #incl 阅读全文
posted @ 2012-08-26 21:25 Griselda. 阅读(230) 评论(0) 推荐(0) 编辑
摘要:题意:给出点和边的个数n, m给出相连点的边..形如(a, b)求最少删去多少个点可以使存在不相邻的两个点不连通..思路:拆点+求最大流..①. 构造一个容量网络N②. 原图中的每个顶点变成网络N中的两个顶点v' 和 v'', 顶点v' 和 v''之间存在一条弧容量为1<确保这个点只可以路过一次..>③. 原图G中的每条边e(u, v), 在N中都有对应弧为e'<u'', v'> 和 e''<u', v''>, e' 和 e' 阅读全文
posted @ 2012-08-26 11:56 Griselda. 阅读(537) 评论(0) 推荐(0) 编辑
摘要:Ambiguous operators need parentheses -----------不明确的运算需要用括号括起Ambiguous symbol ''xxx'' ----------------不明确的符号Argument list syntax error ----------------参数表语法错误Array bounds missing ------------------丢失数组界限符Array size toolarge -----------------数组尺寸太大Bad character in paramenters -------- 阅读全文
posted @ 2012-08-11 17:45 Griselda. 阅读(229) 评论(0) 推荐(0) 编辑
摘要:题意:给一串数字长度n 和 取值长度范围m还有这串数字..a0, a1, a2, a3, ..., an求这串数字中在 长度范围m 内和sum 最大的..思路:从1~n 遍历每一个数..当前数字串和S(i) - 以前数字串和中的最小那个S(i-k){1 < k <m}<以前数字串的‘以前’范围是取值长度范围>‘以前数字串和中的最小那个’可以用 单调队列que 来控制..取遍历结果中最小那个..Tips:主要讲一下什么是单调队列..单调队列..顾名思义就是 单调增或减的队列..它存的值是对应 和数组s 里的下标..其中队头元素是 队列s 最大值或最小值的下标..但是其实这 阅读全文
posted @ 2012-08-10 18:51 Griselda. 阅读(821) 评论(0) 推荐(0) 编辑
摘要:C指针声明解读之左右法则C语言所有复杂的指针声明,都是由各种声明嵌套构成的。如何解读复杂指针声明呢?右左法则是一个既著名又常用的方法。不过,右左法则其实并不是C标准里面的内容,它是从C标准的声明规定中归纳出来的方法。C标准的声明规则,是用来解决如何创建声明的,而右左法则是用来解决如何辩识一个声明的,两者可以说是相反的。右左法则的英文原文是这样说的: The right-left rule: Start reading the declaration from the innermost parentheses, go right, and then go left. When you enco 阅读全文
posted @ 2012-08-08 19:15 Griselda. 阅读(191) 评论(0) 推荐(0) 编辑
摘要:题意:现实生活问题:用手机打字先给出n个单词表示常用单词然后用户按手机键盘上面的数字键.要求用户每按一个数字键,手机弹出可能性最大的单词思路:基础的Trie应用..用字典序构造手机词典..并累计每一个单词前缀串出现的概率. 然后创建数字和字母的映射表(1-3)..计算所有可能前缀串的概率值..Tips:※ 字典树的典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。※ 【网上摘录】串的快速检索: 给出N个单词组成的熟词表,以及一篇全用小写英文书写的文章,请你按最早出现的顺序写出所有不在熟词表中的生词。 在这道题中,我们可以用数组枚举,用哈.. 阅读全文
posted @ 2012-08-08 17:22 Griselda. 阅读(947) 评论(1) 推荐(1) 编辑
摘要:题意:给一 n*m 的棋盘..其中挖了几个洞<闲的没事了..>在木有洞的相邻两个格涂颜色..问能不能都涂上.. 这就是能涂上的..如果能就输出YES 不能就NO思路:※ 很特别的建图方法..因为左右相邻的两个格子的i+j的奇偶性肯定不一样.. 所以就以 i+j 的奇偶性来分出两个集合..成为二分图.. i+j 是奇数为一个集合..i+j 是偶数为一个集合.. 然后利用匈牙利算法..求出最大匹配数.. 最大匹配数正好是未挖洞的格子个数的一半就证明是YES..Tips:先是都初始化为-1 如果是挖洞了的就变成0然后根据 i + j 奇偶性给每个格子编号..即第几个奇数格子... 阅读全文
posted @ 2012-08-08 01:46 Griselda. 阅读(234) 评论(0) 推荐(0) 编辑
摘要:题意:用A~Z表示0~25..给出2个200以内的XYZ-26进制数..即a0 a1 a2 a3……an求出和..用XYZ-26进制表示..其中XYZ-26 -> 10进制是m = a0 * 26^(n-1) + a1 * 26^(n-2) + … + an-3* 26^2 + an-2*26 + an-1思路:不用进行转换然后相加再换回去..直接相加..模拟进位..Tips:※可以直接把短的加到长的字符串上..eg:ABC+CD就是 ABC + CD ---------... 阅读全文
posted @ 2012-08-07 16:18 Griselda. 阅读(251) 评论(0) 推荐(0) 编辑
摘要:题意:很长很长的小数相加..思路:用1000长的数组处理两个小数..前500存整数..后500存小数..然后相应位相加..然后输出除去前导0和后面0的..Tips:※ strchr(char *a, char c) 返回的是 a 字符数组中 c 字符的第一次出现的位置..返回的不是迭代器的位置..而是地址..※ 主要就是对字符串的处理..要很小心阿..※ 以字符数组的形式读入高精度小数..然后用他们 - ‘0’..把字符变成整数来处理..最后以整数方式输出..Code:View Code 1 #include <stdio.h> 2 #include <cstring> 阅读全文
posted @ 2012-08-07 00:00 Griselda. 阅读(304) 评论(0) 推荐(0) 编辑
摘要:题意:求出2000以内的斐波那契数思路:大数相加Tips:---Code:View Code 1 #include <stdio.h> 2 #include <cstring> 3 4 int f[1010][220]; 5 int main() 6 { 7 int i, j; 8 int n, T; 9 int tmp, ttmp;10 f[1][0] = f[2][0] = 1;11 for(i = 3; i < 1010; ++i){12 for(j = 0; j <= 210; ++j)13 f[i][... 阅读全文
posted @ 2012-08-06 19:56 Griselda. 阅读(206) 评论(0) 推荐(0) 编辑
摘要:题意:有m个人拿50 n个人拿100 前台没零钱..问多少种合法的排队方法思路:网上摘录:假设m=4,n=3,的一个序列是:0110100显然,它不合法然后我们把他稍微变化一下:把第一个不合法的“1”后面的所有数0位为1, 1位为0;这样我们得到了另一个序列:0111011,说明每个不合法的都有一个这样的序列跟他一一对应所以计算公式就是:合法的排列方式=所有排列方式-非法排列方式这里非法排列方式的计算 就是:(-)*M!*N!然而在这题,因为每个人都是不同的,所以还要乘以 M!*N!所以得出最终方程:F(N)=(-)*M!*N! ;然后再化简一下;F(N)=(M+N)! * (M-N+1)/( 阅读全文
posted @ 2012-08-06 17:31 Griselda. 阅读(557) 评论(0) 推荐(0) 编辑
摘要:题意:有k个挤奶器,c头牛..每个挤奶器和每头牛之间都有特定的距离..k个挤奶器的位置用1~k的编号表示..奶牛的位置用k+1~k+c表示每个挤奶器每天最多为m头牛挤奶..求安排每头牛到挤奶器前的最大距离的最小值..思路:先用floyd求出每头牛到每台挤奶器的最短距离..然后用二分判断最大距离最小值是多少..check()函数就是根据按距离建图后这个网络流的最大流==牛的头数其中建图先建一个超级源点..作为每头牛的前驱..他们的流量为1..然后建一个超级汇点..作为每台挤奶器的后继..他们的流量为m..如果由floyd求出的最短距离 >= 二分假设的最大距离最小值x..就连线..然后根据 阅读全文
posted @ 2012-08-06 16:49 Griselda. 阅读(473) 评论(0) 推荐(0) 编辑

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