贪心-中位数-前缀和-差分
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
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }