07 2013 档案

摘要:题意就是让你求区间最大和最小值的差值。这题可以用线段树,也可以用Tarjan 的Sparse Table算法(参考刘汝佳训练指南197),这里我用了ST算法,还有要说明的是题目描述的数据范围是不准确的如果你数组开比50000大一点点的话是会RE的。代码://poj 3263 RMQ//2013-07-30-21.39#include #include #include using namespace std;const int maxn = 100005;int dmax[maxn][30];int dmin[maxn][30];int a[maxn];void init(int n){ .. 阅读全文
posted @ 2013-07-30 21:45 xindoo 阅读(203) 评论(0) 推荐(0)
摘要:题意: 在一个正常的点可以净化该行该列的所有细胞,判断是否可以净化所有的细胞,并且输出所选的点。思路: 如果可以的话,一定会选n个点。 先判断每一行是否有正常细胞,然后判断每一列是否有,如果都没有肯定不能净化,然后输出每一行或者每一列的第一个正常细胞的位置就好。#include #include #include using namespace std;int n ;char map[110][110];int main(){ cin>>n; int i , x[110] , y[110] , j; memset(x , 0 , sizeof(x)); m... 阅读全文
posted @ 2013-07-20 23:27 xindoo 阅读(164) 评论(0) 推荐(0)
摘要:题意: 要在N个城市之间修建道路,使得任意两个城市都可以到达,而且不超过两条路,还有,有些城市之间是不能修建道路的。思路: 要将N个城市全部相连,刚开始以为是最小生成树的问题,其实就是一道简单的题目。 要求两个城市之间不超过两条道路,那么所有的城市应该是连在一个点上的,至于这个点就很好找了,只要找到一个没有和其他点有道路限制的即可。//cf 192 B#include #include char map[1005][1005];int main(){ int n, m; while (scanf("%d %d", &n, &m) != EOF) { int 阅读全文
posted @ 2013-07-20 23:21 xindoo 阅读(204) 评论(0) 推荐(0)
摘要:题意: 如果某一行没有草莓,就可以吃掉这一行,某一列没有也可以吃点这一列,求最多会被吃掉多少块蛋糕。//cf 192 div2#include #include int vis[11][11];char map[11][11];int main(){ int r, c; while (scanf("%d %d", &r, &c) != EOF) { for (int i = 1; i <= r; i++) scanf("%s", &map[i][1]); memset(vis, 0, sizeof (vis)); ... 阅读全文
posted @ 2013-07-20 23:00 xindoo 阅读(240) 评论(0) 推荐(0)
摘要:题目链接 大概题意就是告诉你有个n个小括号,每一个“)”左边有多少个“(”都告诉你了,然后让你求出每一对括号之间有多少对括号(包含自己本身)。思路: 我先计算每个“)”左边有多少个“(”要匹配,然后每遇到一个“)”,然后向前寻找第一个可以匹配的“(”,找到后将其数量减一,这样的话在寻找的过程中经过了几个“)”就表示这对括号里面有多少括号。//poj 1068//2013-07-17-08.45#include #include #include using namespace std;int a[25];int lift[25];int main(){ int t, n; s... 阅读全文
posted @ 2013-07-17 09:08 xindoo 阅读(184) 评论(0) 推荐(0)
摘要:先看效果,没有用任何绘图工具,只是运行了一段python代码。代码如下:_ = ( 255, lambda V ,B,c :c and Y(V*V+B,B, c -1)if(a... 阅读全文
posted @ 2013-07-16 08:22 xindoo 阅读(3119) 评论(0) 推荐(0)
摘要:题目链接 题目就是让你输出n个数的序列,要保证该序列是递增的,并且第i个数的前面不能保护它的约数,我直接先对前100000的素数打表,然后输出前n个,so easy。//cf 191 B#include #include int ans[100005];bool vis[10000000];int main(){ int cnt = 1; for (int i = 2; i 100000) { break; } } int n; while (scanf("%d", &n) != EOF) { ... 阅读全文
posted @ 2013-07-04 22:18 xindoo 阅读(279) 评论(0) 推荐(0)
摘要:题目链接 给你一串只有0和1的数字,然后对某一区间的数翻转1次(0变1 1变0),只翻转一次而且不能不翻转,然后让你计算最多可能出现多少个1。 这里要注意很多细节 比如全为1,要求必须翻转,这时候我们只要翻转一个1就可以了,对于其他情况,我们只要计算区间里面如果0多于1,将其翻转后计算1的总数,然后取最大值。//cf 191 A//2013-07-04-22.13#include #include #include using namespace std;int a[105];int cnt[105];int main(){ int n; while (scanf("%d" 阅读全文
posted @ 2013-07-04 22:14 xindoo 阅读(119) 评论(0) 推荐(0)