随笔分类 -  Codeforces

摘要:题意,有n只袋鼠,没每只袋鼠有个袋子,大小为si,一个袋鼠可以进入另外一个袋鼠的袋子里面,当且仅当另一个袋鼠的袋子是他的二倍或二倍一上,然后中国袋鼠就是不可见的,不能出现多个袋鼠嵌套的情况。让你求最少可见袋鼠的数量。 解题方法是先排序再贪心,贪心策略是从中间开始贪心。#include #include const int maxn = 500005;using namespace std;int s[maxn];int n;int main(){ while (scanf("%d", &n) != EOF) { for (int i = 1; i >1 ... 阅读全文
posted @ 2013-12-18 08:15 xindoo 阅读(171) 评论(0) 推荐(0)
摘要:题目意思大概是给你w,m,k三个数,让你从m开始找 m m+1 m+2 m+3...........m+m', 使得他们的权值之和不超过w,计算权值的方法如下S(n)·k 。 S(n)表示n有多少位数,让你计算出最多有多少个这样的数。 乍一眼看去,10^16如此大的数肯定不能暴力,然后稍微思考一下就可以找到规律了,规律如下。 1-10 有9个一位数 1-100 有9个一位数有90个二位数 1-1000 有9个一位数有90个二位数 有900个三位数 1-10000 有9个一位数有90个二位数 有900个三位数 有9000个四位数 。。。。。。。... 阅读全文
posted @ 2013-12-17 09:17 xindoo 阅读(176) 评论(0) 推荐(0)
摘要:很简单,就是找第i位、i+k位、i+2*k位...........i+m*k位有多少个数字,计算出每个数出现的次数,找到出现最多的数,那么K-Periodic的第K位数肯定是这个了。这样的话需要替换的就是除出现最多的数之外的数了。#include #include using namespace std;int a[105];int main(){ int n, k; while (scanf("%d %d", &n, &k) != EOF) { for (int i = 1; i m) m = cnt; ... 阅读全文
posted @ 2013-12-08 20:52 xindoo 阅读(279) 评论(0) 推荐(0)
摘要:#include #include bool vis[11];int n, k;bool judge(int x){ memset(vis, false, sizeof(vis)); if (x == 0) vis[0] = true; while (x) { vis[x%10] = true; x /= 10; } for (int i = 0; i int a[100005];int main(){ int n; while (scanf("%d", &n) != EOF) { i... 阅读全文
posted @ 2013-11-20 14:49 xindoo 阅读(205) 评论(0) 推荐(0)
摘要:题意就是给出3个原子的化学价,然后组成一个分子,要保证这个分子是稳定的,如果你还记得高中化学知识的话这个很容易理解,然后让你求出1-2 2-3 1-3 号原子之间有几条键, 这里我分别用ta tb tc 表示, 用数学的方法表示出来的话就是a = tc + tb; b = ta+tc; c = ta + tb;可能有多种情况,只要输出一种即可。 我们随便找其中一个原子,然后从0开始枚举它到b原子有多少键,根据上面的式子,可以计算出到c原子的键,然后就可以知另外两个原子间的键值,做一次判断即可,无需判断a = tc + tb; b = ta+tc; c = ta + tb; 因为计算工... 阅读全文
posted @ 2013-09-19 16:07 xindoo 阅读(191) 评论(0) 推荐(0)
摘要:这个题目属于线段树的点更新区间查询,而且查的是整个区间,其实不用写query()函数,只需要输出根节点保存的值就可以了。题意: 输入n,m表示有2^n个数和m个更新,每次更新只把p位置的值改成b,然后输出整个序列运算后的值,而这个运算就比较复杂了, 最下面一层两个数字之间或运算得到原来数目一半的数字,然后两个之间异或运算,得到一半,再或再异或………………,一直到得到一个数字,这个数字就是要求的结果。思路: 如果只是一种运算,这就是简单的线段树点更新,区间查询。而现在,我们要确定什么时候用or 什么时候用xor, 想想看,最下面一层是用or, 总共有n层,因为or和xor是交替进行的,我... 阅读全文
posted @ 2013-08-27 11:19 xindoo 阅读(286) 评论(0) 推荐(0)
摘要:A.题意就是把字符串里面的数字按增序排列,直接上代码。#include #include #include using namespace std;int main(){ char s[1005]; int num[105]; while (scanf("%s" , s) != EOF) { int l = strlen(s); int t = 0; int cnt = 0; for (int i = 0; i #include #include #include #include #include using n... 阅读全文
posted @ 2013-08-27 11:08 xindoo 阅读(293) 评论(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 阅读(161) 评论(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 阅读(196) 评论(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 阅读(237) 评论(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 阅读(275) 评论(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 阅读(116) 评论(0) 推荐(0)
摘要:题目链接有红绿蓝三种颜色的画,每种拿三朵可以组成一束花,或者各拿一朵组成花束,告诉你每种花的数目,求出可能组成最多的花束。如果你的代码过不了,考虑一下 8 8 9这种组合。 因为数据量很大,我的思想就是局部和总体采用不同的策略。#include #include using namespace std;int main(){ int r, g, b; while (cin >> r >> g >> b) { int m = min(r, g); m = min (m, b); int ans = 0; int a = 0... 阅读全文
posted @ 2013-06-29 09:33 xindoo 阅读(257) 评论(0) 推荐(0)
摘要:题目链接题意: 有n个男孩和m个女孩,他们要结对跳舞,每对要有一个女孩和一个男孩,而且其中一个要求之前没有和其他人结对,求出最大可以结多少对。如图,一条线代表一对,只有这样三种情况。#include #include #include using namespace std;int main(){ int n, m; while (cin >> n >> m) { int mn = min(n, m); int k = (mn<<1) - 1; k += (max(n, m) - mn); int a = 1, b ... 阅读全文
posted @ 2013-06-29 09:27 xindoo 阅读(215) 评论(0) 推荐(0)
摘要:A. Perfect Pairtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputLet us call a pair of integer numbersm-perfect, if at least one number in the pair is greater than or equal tom. Thus, the pairs (3, 3) and (0, 2) are 2-perfect while the pair (-1, 1) 阅读全文
posted @ 2013-06-22 16:46 xindoo 阅读(222) 评论(0) 推荐(0)