2014最难赛区


7146 贪心这道题是考验STL的.
我们按照一个顺序排序(我方攻击力升序,敌方防御力升序),
此时因为要全部歼灭,优先考虑如何干掉敌方防御力最高的,此时将所有攻击力比它高的我方都放入multiset中维护,然后选择一个”最合适”的匹配(如果有我方防御力大于此时敌方攻击力的元素就使用,若没有就牺牲.首要任务是全部歼灭,此时能够消灭这个敌方的人都已经在multiset中了,若能够不牺牲却让其牺牲是不必要的,因为后面的元素已经保证能够歼灭后面的敌方)

#include<set>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define maxn 1100000
using namespace std;
struct P{int d,a;bool operator <(const P &x) const{return a>x.a;}
}A[maxn],B[maxn];int main(){int T,cas=1;scanf("%d",&T);while(T--){int N,M;scanf("%d",&N);scanf("%d",&M);for(int i = 1;i<=N;i++)scanf("%d%d",&A[i].a,&A[i].d);for(int i = 1;i<=M;i++)scanf("%d%d",&B[i].d,&B[i].a);sort(A+1,A+N+1);sort(B+1,B+M+1);int ans = N;multiset<int> st;for(int i = 1,p=1;i<=M;i++){while(p<=N && B[i].a<=A[p].a)st.insert(A[p++].d);
//            for(auto ii=st.begin();ii!=st.end();ii++)
//                printf("%d ",*ii);if(st.empty()) {ans=-1;break;}auto it = st.upper_bound(B[i].d);if(it==st.end()){st.erase(st.begin());ans--;}else st.erase(it);}printf("Case #%d: %d\n",cas++,ans);}return 0;
}/**
103 2
10 10
11 11
20 20
10 10
20 203 240 40
12 8
30 10
10 10
20 202 2
10 10
20 20
10 5
20 53 2
5 7
7 3
1 2
4 4
2 2
2 1
3 4
1 10
5 62 2
12 8
30 10
10 10
20 20**/

7147
PS:我不会证明这个贪心,因为还要考虑另一堆在XX情况反而会大于这堆呢
仍旧贪心.题目意思是有N个人,按比赛分数高低选取M个.选不上的最大分数和选上的最小分数.


if( A < C) swap(A,C);选不上,此时将人分为两堆.M+1,N-M-1, 要让M+1分数尽量多
则 ans1 += (M+1)*max(A,B);
接下来对于M+1内部来说,要尽量平均,两种情况都是平局,或一胜一负对半. ans1 += M/2 *max(A+C,B+B);
如果M是奇数,那么不会对半,定有一个为多输一局或仍是平局
if(M&1) ans1 += max(C,B);
同理可知选上的最小分数就是分为M-1,N-M+1 两堆,
ans2 += min(C,B)*(M-1)
接下来对于N-M+1内部来说,尽量平均,则
ans2 += (N-M)/2 *min(A+C,B+B);
如果N-M是奇数,那么不会对半,定有一个为多输一局或仍是平局
if( N-M &1) ans2 += min(A,B);

#include<set>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define maxn 1100000
using namespace std;int main(){int T,N,M,A,B,C;int cas = 1;for(scanf("%d",&T);T;T--) {scanf("%d%d",&N,&M);scanf("%d%d%d",&A,&B,&C);if(A<C) swap(A,C);long long ans1=0,ans2=0;ans1 += (long long)(N-M-1) * max(A,B);ans1 += (long long)M/2 * max(A+C,B+B);if(M & 1)ans1 += (long long)max(C,B);ans2 += (long long)(M-1) * min(B,C);ans2 += (long long)(N-M)/2 * min(A+C,B+B);if(N - M & 1)ans2 += (long long)min(A,B);printf("Case #%d: %lld %lld\n",cas++,ans1,ans2);}return 0;
}

7139
这个题就是模拟题,但是性质很深.
观察可得到一个结论:对于一个方格中的人来说,如果要有一个完整的时针旋转,则必然是一边走下去,一边走上去,且”包含”所以不用考虑R,L.
若车在人的正左方下降了X次,上升了Y次,那么那个人的旋转圈数便是abs(X-Y)。
然后暴力模拟车的移动:
在车向下移动的时候,我们就要给车影响右方的一个矩阵加上1。
在车向上移动的时候,我们就要给车影响右方的一个矩阵减去1。
这里用Vector进行建图,因为只给了NXM的范围…

#include<set>
#include<cmath>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define maxn 1100
using namespace std;
char *str = "UDLR";
int fx[4][2] = {-1,0,  1,0,  0,-1,  0,1};
vector<vector<int> > C;
void add(int r1,int r2,int c,int val){C[r1][c] += val;C[r2][c] -= val;
}
int main(){int T;int cas = 1;for(scanf("%d",&T);T;T--) {int N,M,K;scanf("%d%d%d",&N,&M,&K);C = vector<vector<int> >(N+2,vector<int>(M+2,0));int r=1,c=1;for(int i = 0;i<K;i++){char op;int step;scanf(" %c%d",&op,&step);if(op=='U') add(r-step,r,c,-1);if(op=='D') add(r,r+step,c,1);int f = strchr(str,op)-str;r += step*fx[f][0];c += step*fx[f][1];}long long ans = 0;for(int i = 1;i<=N;i++)for(int j = 1;j<=M;j++){C[i][j] = C[i][j] + C[i-1][j] + C[i][j-1] -C[i-1][j-1];ans += C[i][j] * C[i][j];}printf("Case #%d: %lld\n",cas++,ans);}return 0;
}

2014 ACM 上海现场赛B,I,J UVALive7146 7147 7139相关推荐

  1. 2014 ACM亚洲区域赛 - 北京现场赛

    2014 ACM亚洲区域赛 - 北京现场赛A - A Curious Matt一个排序,找最大值,overB - Black And White数据范围很小,单纯的暴力会TLE,看题解,染色问题有一个 ...

  2. 2014 acm亚洲区域赛(北京)总结

    2014 acm/icpc 亚洲区域赛北京站    第一次到外面去比赛,周五下午做高铁到北京,报到注册后就去找在北京的同学玩了.    周六,上午,随便拉了个cf,我们随便看了下,没有写代码.下午的开 ...

  3. 树形DP+并查集+左偏树, HDU-5575,Discover Water Tank,2015上海现场赛D题

    只是ACM/IICPC 2015 上海区域赛的一道题.原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=5575 题目描述 N-1个木板把一个水箱划分成了N ...

  4. 2015年上海现场赛重现 (A几何, K暴力搜索)

    A: 题目链接 : https://vjudge.net/contest/250823#problem/A 参考 : https://www.cnblogs.com/helenawang/p/5465 ...

  5. HDU5575 Discover Water Tank 2015上海现场赛D题 (树形dp,并查集,左偏树)

    题目大意: 有一个1维的长度为N,高度无限的水柜,现在要用N-1个挡板将其分为N个长度为1的小格,然后向水柜中注水,水可以低于挡板也可以以溢出去(这样就要与旁边格子的水位相同),现在有M次探测,探测i ...

  6. 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it

    链接:https://www.nowcoder.com/acm/contest/163/F 来源:牛客网 2018 ACM 国际大学生程序设计竞赛上海大都会赛重现赛 F Color it 时间限制:C ...

  7. 2014 ACM/ICPC 北京赛区网络赛解题报告汇总

    首页 算法竞赛» 信息聚合 ONLINE JUDGE 书刊杂志 BLOG» 新闻故事» 招聘信息» 投稿须知 2014 ACM/ICPC 北京赛区网络赛解题报告汇总 九月 21st, 2014 | P ...

  8. 2018年 ACM/ICPC亚洲区域赛 青岛赛区现场赛 比赛总结

    首先祝贺自己收获了ACM生涯中的第二枚铜牌. 首先吐槽一下中石油: 周六早上来到中国石油大学,连个志愿者小姐姐都没看到.(但是看到了女装大佬).报完到之后发现教练少了一张午餐券(要不要这么粗心).为了 ...

  9. 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)

    摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...

最新文章

  1. 一天 用户旅程_439天的旅程改变了我的生活
  2. 转:一个android开发者独立开发社交app全过程
  3. centos的网络配置
  4. C++ Primer 5th笔记(8)chapter8 类:IO库-string流
  5. 数据结构Java07【二叉排序树(添加查找删除-节点)】
  6. 计算机消失了一个磁盘,win7系统重装后莫名奇妙消失一个分区磁盘的解决方法...
  7. else 策略模式去掉if_java – 用状态/策略模式替换if/else逻辑
  8. Mac - 如何安全地还原 Mac 的默认字体
  9. Oracle中 如何用一个表的数据更新另一个表中的数据(含表备份)
  10. 2k2实用球员_2KOL2王朝不知道用谁?五大位置低价实用球员大解析!
  11. win10如何添加linux开机引导,win10 linux 双系统怎么设置开机引导
  12. PS学习总结一:入门版必备的基础功能
  13. ##DBUtils工具类的正确使用(一)
  14. 1年赋能100家环保机构,阿里云发布“青山绿水”计划
  15. 计蒜客 god of gambler
  16. java牛奶订购系统,Java IO系统
  17. 哪里东西更便宜?读《卧底经济学(珍藏版)》
  18. Android仿淘宝详情页面viewPager滑动到最后一张图片跳转的功能
  19. Spark RDD与Partion
  20. 斩获数亿元B轮融资,这家Tier 1抢跑「L2/L2+」主战场

热门文章

  1. 完美国际发包call优化版(delphi)
  2. Ui 组件库 (移动端)
  3. CUMT平台的部分题解
  4. NYOJ 252 01串
  5. 微信公众号开发--服务号
  6. 英文文献阅读器Paper Digest使用指南
  7. Summernote使用入门
  8. 国家中小学智慧教育平台网页版下载教材
  9. 杀不死的Webshell
  10. 下一个阿里云MVP,就是你!专属服务、大咖交流、企业游学等你来!申请就送100元代金券!...