贪心-中位数-前缀和-差分

1. 纸牌问题 - 贪心
洛谷 P1031 均分纸牌 (单次操作数为任意数)
2. 环形纸牌 - 中位数,前缀和
codevs1485 七夕祭
洛谷P2512 [HAOI2008] 糖果传递 单次操作数为1 (一定存在两个人不交换的最优解-->于是我们环拆链)
3. 区间问题
① POJ3614 / 洛谷 P2887 Sunscreen (贪心+优先队列)(pair赛高)
(for循环因为自己智障卡死(详见第一个for循环中画蛇添足加的判断——我觉得主要是 j 计数的问题))

② POJ3190 / 洛谷P2895(贪心+优先队列)//详见代码注释(struct赛高)bool operator < (const STRUCT& struct) const{}

 POJ1328 //被恶心的数据卡了2小时,主要是它没和我说d这个半径会小于0啊!(也不符合马克思主义啊🙈)

>(sqrt的那个"d"与"y"的double和int两种情况的运算还诡异的不同,后面看了某个博客把对于d的特判加上再输入另一个博客给的测试数据全对提交就AC了)

 4. Light bulbs: 南京网络赛的准签到题(然而我们没签成),思路是差分,并且要省时地差分,差分是啥???

实际上是通过判断前缀和的奇偶性来判断区间是否计入的,弄个端点确实比区间修改好多了,线段树就算了吧······

Code

 1 #pragma warning (disable:4996)
 2 #include <algorithm>
 3 #include <iostream>
 4 #include <iomanip>
 5 #include <cstring>
 6 #include <string>
 7 #include <cstdio>
 8 #include <cmath>
 9 #define inf 0X7f7f7f7f
10 #define MS_I(x) memset(x,-inf,sizeof(x))
11 #define MS(x) memset(x,0,sizeof(x))
12 #define MSI(x) memset(x,inf,sizeof(x))
13 using namespace std;
14 typedef long long ll;
15 typedef unsigned long long ull;
16 const int maxn = 1e6 + 5;
17 using namespace std;
18 pair<int, int> node[maxn];
19 int main()
20 {
21     int T;
22     scanf("%d", &T);
23     for (int z = 1; z <= T; z++)
24     {
25 
26         int m, n;
27         scanf("%d %d", &m, &n);
28         int l, r, tot = 1;
29         for (int i = 1; i <= n; i++)
30         {
31             scanf("%d %d", &l, &r);
32             node[tot++] = make_pair(l, 1);
33             node[tot++] = make_pair(r + 1, -1);
34         }
35         sort(node, node + tot);
36         int sum = 0, now = 0, ans = 0;
37         for (int i = 1; i < tot; i++)
38         {
39             if (now != node[i].first)
40             {
41                 if (sum & 1)
42                     ans += node[i].first - now;
43                 now = node[i].first;
44             }
45             sum += node[i].second;
46         }
47         printf("Case #%d: %d\n", z, ans);
48     }
49     return 0;
50 }
我是一只可爱的电灯泡
posted @ 2019-08-18 18:02  吴下阿萌  阅读(267)  评论(0编辑  收藏  举报