题目地址

先简单的总结一下这次CF,前两道题非常的水,可是第一题又是因为自己想的不够周到而被Hack了一次(或许也应该感谢这个hack我的人,使我没有最后在赛后测试中WA)。做到C题时看到题目情况非常复杂,明显超出自己现在水平,卡了很久也没有好好做题。等了很长时间才开始看D题,而这时信心已经严重不足。赛后再看D题才发现自己比赛时理解错了题意,致使误以为题目非常复杂。而实际上,这个过程分析起来是非常容易的。

对于三种棱长度分别为a,b,c的石头,r最大为min(a,b,c)/2;。

如果两个石头要拼接,那么只能让较长的两个接在一起,否则就毫无意义。其实对于自己来说,比较困难的就是找到存储一块石头较长两条边的容器,和每一个可能可以拼的石头的编号。这里,就需要用到map整体存储,和pair存储石头的较长两边。找到这样存储的办法后,思路就是把石头一块块的扫,扫一遍后,也就得出了答案。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int a[];
  4. map<pair<int ,int >,int>ma;//用名字为ma的map记录最大的两条棱长,get到map的第一位是用于排序的。
  5. map<pair<int ,int >,int>id;//用名字为id的map记录这两条棱属于的石头的编号
  6. int main()
  7. {
  8. int i,n,g1=,g2=,mx=;//g1用来记录最后选中的石头编号,g2兼起记录最后是一块石头还是两块,以及如果是两块石头那么另一块的编号是多少的作用。
  9. scanf("%d",&n);
  10. for(i=;i<=n;i++)
  11. {
  12. scanf("%d%d%d",&a[],&a[],&a[]);
  13. sort(a+,a+);//sort排个序,方便接下来操作
  14. if(a[]>mx)
  15. {
  16. mx=a[];g1=i;g2=;//最大值的产生有两种情况,这是其一,某块石头的最小棱长大于原本的最大值。如果产生了新的最大值,那么此时为一块石头的情况,将g2赋为0.
  17. }
  18. if(min(ma[make_pair(a[],a[])]+a[],a[])>mx){//注意拼接完的时候最小棱可能是新生成的棱,也可能是原本第二长的棱。
  19. mx=min(ma[make_pair(a[],a[])]+a[],a[]);
  20. g1=id[make_pair(a[],a[])];g2=i;//这是最大值产生的第二种情况。将g1、g2分别记录两块石头的编号。
  21. }
  22. if(a[]>ma[make_pair(a[],a[])])//if里的内容实际上含义为,如果这块石头现在无法以较长的两棱拼接。这时,就要先将最短的棱的值赋给这个map,方便接下来使用。
  23. {
  24. ma[make_pair(a[],a[])]=a[];
  25. id[make_pair(a[],a[])]=i;
  26. }
  27. }
  28. if(g2!=)//g2不为0,也就是两块石头的情况
  29. {
  30. printf("2\n%d %d\n",g1,g2);
  31. }
  32. else
  33. {
  34. printf("1\n%d\n",g1);
  35. }
  36. return ;
  37.  
  38. }

做题生涯第二次遇到pair,不由得想到了第一次遇见pair的Codeforces Round #377 (Div. 2) E题,这里也写一下解题报告。

题目地址

解题思路:

关键还是要找到恰当的容器存储电脑需要的电、插座的电,以及电脑插到的插座的位置,第几个电源按的分压器数量。头一次见到pair,真的是耳目一新。自己还是太弱,直到的太少,继续加油吧。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. pair <long long ,long long >c[];//电脑需要功率
  4. pair <long long ,long long >s[];//sockect 插座功率
  5. long long n,m,adapter[],used[],lo[],ge1=,ge2=,i,j;
  6. int main()
  7. {
  8. cin>>n>>m;
  9. for(i=;i<=n;i++)
  10. {
  11. cin>>c[i].first;
  12. c[i].second=i;
  13. }
  14. for(i=;i<=m;i++)
  15. {
  16. cin>>s[i].first;
  17. s[i].second=i;
  18. }
  19. sort(c+,c++n);
  20. sort(s+,s++m);
  21. for(int z=;z<;z++)
  22. {
  23. for(i=,j=;i<=n;i++)
  24. {
  25. if(lo[c[i].second])//lo非0,意为已经找到了符合条件的插座,那么就看下一个i
  26. continue;
  27. while(j<=m&&(s[j].first<c[i].first))//这个插座功率小于电脑需要功率,那么就看下一个,由于之前排过序,之后每次统一除2,顺序仍不变
  28. {
  29. j++;
  30. }
  31. while(j<=m&&used[s[j].second])//如果这个插座用过了,那么也只能看下一个。
  32. {
  33. j++;
  34. }
  35. if(j<=m&&!used[s[j].second]&&s[j].first==c[i].first)//if里给出可以插上的所有条件,插座满足范围,没用过,且电流相等
  36. {
  37. lo[c[i].second]=s[j].second;//这时,这个电脑的插座位置就是这个插座的序号
  38. used[s[j].second]=;//将该插座标记为用过
  39. adapter[s[j].second]=z;//这个插座的分压器数量为此时除z进行到的轮数
  40. ge1++;//可以插电的电脑+1
  41. ge2+=z;//要使用的分压器数加上此时的轮数
  42. }
  43. }
  44. for(i=;i<=m;i++)
  45. {
  46. s[i].first=(s[i].first+)/;//进行插座统一减半操作
  47. }
  48. }
  49. cout<<ge1<<" "<<ge2<<endl;
  50. for(i=;i<=m;i++)
  51. {
  52. cout<<adapter[i]<<" ";//全都要输出,未使用的默认为0
  53. }
  54. cout<<endl;
  55. for(i=;i<=n;i++)
  56. {
  57. cout<<lo[i]<<" ";
  58. }
  59. cout<<endl;
  60. }

总结:前路漫漫,要学的还有太多,知识上还是欠缺太多。不过学习阶段,rating不断的掉又有何妨,只要坚持下去,终有一天rating会得到提高。

补题过程中看到那么多从未见过的东西,艰难自学的过程是痛苦的,可是学会后也可以应用的感觉又是无比的令人感到充实与快乐。

勿忘初心,勇往直前!

Codeforces Round #378 (Div. 2) D题(data structure)解题报告的更多相关文章

  1. Codeforces Round #612 (Div. 2) 前四题题解

    这场比赛的出题人挺有意思,全部magic成了青色. 还有题目中的图片特别有趣. 晚上没打,开virtual contest打的,就会前三道,我太菜了. 最后看着题解补了第四道. 比赛传送门 A. An ...

  2. Codeforces Round #713 (Div. 3)AB题

    Codeforces Round #713 (Div. 3) Editorial 记录一下自己写的前二题本人比较菜 A. Spy Detected! You are given an array a ...

  3. Codeforces Round #552 (Div. 3) A题

    题目网址:http://codeforces.com/contest/1154/problem/ 题目意思:就是给你四个数,这四个数是a+b,a+c,b+c,a+b+c,次序未知要反求出a,b,c,d ...

  4. Codeforces Round #412 Div. 2 补题 D. Dynamic Problem Scoring

    D. Dynamic Problem Scoring time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  5. Codeforces Round #257 (Div. 2) E题:Jzzhu and Apples 模拟

    E. Jzzhu and Apples time limit per test 1 second memory limit per test 256 megabytes input standard ...

  6. Codeforces Round #469 (Div. 1) 949C C. Data Center Maintenance (Div. 2 950E)

    题 OvO http://codeforces.com/contest/949/problem/C codeforces 949C 950E 解 建图,记原图为 G1,缩点,记缩完点后的新图为G2 缩 ...

  7. Codeforces Round #237 (Div. 2) B题模拟题

    链接:http://codeforces.com/contest/404/problem/B B. Marathon time limit per test 1 second memory limit ...

  8. Codeforces Round #378 (Div. 2) D. Kostya the Sculptor map+pair

    D. Kostya the Sculptor time limit per test 3 seconds memory limit per test 256 megabytes input stand ...

  9. Codeforces Round #271 (Div. 2) E题 Pillars(线段树维护DP)

    题目地址:http://codeforces.com/contest/474/problem/E 第一次遇到这样的用线段树来维护DP的题目.ASC中也遇到过,当时也非常自然的想到了线段树维护DP,可是 ...

随机推荐

  1. (六)ARM状态寄存器-PSR

    ARM程序状态寄存器Program State Register 在ARM模式中, 有16个数据寄存器和1或2个状态寄存器是可以随时访问的.在特权模式 (privileged mode) 下, 对应的 ...

  2. openfire升级指南

    原文:http://www.liuhaihua.cn/archives/355.html 升级Openfire是和从头开始安装Openfire几乎一样简单.作为升级过程的一部分,它强烈建议您先备份当前 ...

  3. error C2783: 无法为“T”推导 模板 参数

    原则:“模板参数推导机制无法推导函数的返回值类型” 版本一: // 缺少<T> 参数 int n 对比第三个版本( 缺少<T> 参数 T n) ! 编译错误提示: 错误 1 e ...

  4. TP学习笔记

    ThinkPHP采用单一入口模式访问应用,对应用的所有请求都定向到应用的入口文件,系统会从URL参数中解析当前请求的模块.控制器和操作,下面是一个标准的URL访问格式: http://serverNa ...

  5. HTTP Status 500 - An exception occurred processing at line 35

    HTTP Status 500 - An exception occurred processing JSP page /manage/addCategory.jsp at line 35 type ...

  6. JavaScript设计模式与开发实践 - 单例模式

    引言 本文摘自<JavaScript设计模式与开发实践> 在传统开发工程师眼里,单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返 ...

  7. js中正则表达式 书写方法

    function test(){    var text="index.aspx?test=1&ww=2&www=3";            var   re = ...

  8. Unity5中叹为观止的实时GI效果

    http://www.manew.com/thread-43970-1-1.html 今天为大家分享unity与Alex Lovett共同使用unity5制作的Shrine Arch-viz Demo ...

  9. 【bzoj1043】下落的圆盘

    [bzoj1043]下落的圆盘 题意 有n个圆盘从天而降,后面落下的可以盖住前面的.求最后形成的封闭区域的周长.看下面这副图, 所有的红色线条的总长度即为所求. \(1\leq n\leq 1000\ ...

  10. 能源项目xml文件标签释义--DefaultAdvisorAutoProxyCreator

    [Spring]AOP拦截-三种方式实现自动代理 这里的自动代理,我讲的是自动代理bean对象,其实就是在xml中让我们不用配置代理工厂,也就是不用配置class为org.springframewor ...