题1 国际象棋(chess

  1. 【问题描述】
  2. N个人要参加国际象棋比赛,该比赛要进行K场对弈。每个人最多参加2场对弈,最少参加0场对弈。每个人都有一个与其他人都不相同的等级(用一个正整数来表示)。在对弈中,等级高的人必须用黑色的棋子,等级低的人必须用白色的棋子。每一个人最多只能用一次黑色的棋子和一次白色的棋子。为了增加比赛的可观度,观众希望K场对弈中双方的等级差的总和最小。
  3. 比如有7个选手,他们的等级分别是30; ; ; ; ; ; ,要进行3场比赛。最好的安排是Player vs Player , Player7 vs Player , Player vs Player ,此时等级差的总和等于(-) + (-) + (-) = 5达到最小。
  4. 【输入格式】
  5. 第一行两个正整数NK
  6. 接下来有N行,第i行表示第i-1个人等级。
  7. 【输出格式】
  8. 在第一行输出最小的等级差的总和。
  9. 【输入样例】
  10.  
  11. 【输出样例】
  12.  
  13. 【数据范围】
  14. 90%的数据中,≤N
  15. 100%的数据中,≤N
  16. 保证所以输入数据中等级的值小于108,≤KN-

题目

tag:贪心 排序

思路:在这种两两对弈的情况下,有n*(n-1)/2种可能性,但是原题已限定条件(每一个人最多只能用一次黑色的棋子和一次白色的棋子,即只能和数值比自己大的选择1个,比自己小的选择1个),极大的缩小了选择的可能。由于k<=n-1,易得贪心策略----在排序后相邻数值的差放入新数组,再次排序选最小的k个。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<algorithm>
  5. #define maxn 100010
  6. using namespace std;
  7. int n,m,i,cnt,a[maxn],s[maxn];
  8. long long ans;
  9. int read()
  10. {
  11. int x=;
  12. char ch=getchar();
  13. while(ch<''||ch>'') ch=getchar();
  14. while(ch>=''&&ch<=''){
  15. x=x*+ch-'';
  16. ch=getchar();
  17. }
  18. return x;
  19. }
  20. int main()
  21. {
  22. //freopen("chess.in","r",stdin);
  23. //freopen("chess.out","w",stdout);
  24. scanf("%d%d",&n,&m);
  25. for(i=;i<=n;++i) a[i]=read();
  26. sort(a+,a+n+);
  27. for(i=;i<n;++i) s[i]=a[i+]-a[i];
  28. sort(s+,s+n);
  29. for(i=;i<=m;++i) ans+=s[i];
  30. cout<<ans<<endl;
  31. return ;
  32. }

题2  单词化简(abbreviate)

  1. 【题目描述】
  2. 最近情报人员得到了一些经过加密的文章,每个单词都很长。破译人员想到先把单词化简一下,方法是把每个单词尽量取短些的前缀,但所取的前缀不能是其他单词的前缀。
  3. 这个任务现在就交给你来完成。
  4. 解释:“字符串s1s2的前缀”是说把字符串s2的后面去掉某些,只保留与s1相同长度是,s2就与s1完全相同。如:“abc“是”abcaade“和”abc“的前缀,但不是”abadc“的前缀。
  5. 数据范围
  6. 单词数N,<=n<=; 每个单词长度不超过50;并且都是由小写字母构成。
  7. 保证所给单词没有一个单词是另一个单词的前缀。
  8. 【输入文件】
  9. 第一行一个整数N,表示单词的个数。
  10. 下面有N行,每行一个单词。
  11. 【输出文件】
  12. N行,每行一个单词,是对应上面N个单词化简后的单词。
  13. 【样例输入1
  14.  
  15. abc
  16. efg
  17. ijh
  18. 【样例输出1
  19. a
  20. e
  21. i
  22.  
  23. 【样例输入2
  24.  
  25. aac
  26. aad
  27. aae
  28. 【样例输出2
  29. aac
  30. aad
  31. aae

题目

tag:贪心 字符串

思路:数据量较小,找到每个字符串与其他所有字符串最长的重合部分截至点。优化可考虑按字典序排序,由于字符串与上下两个的契合度最高,上下比较即可。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<algorithm>
  5. using namespace std;
  6. char a[][],n,i,j,k;
  7. int ans[];
  8. int main()
  9. {
  10. //freopen("abbreviate.in","r",stdin);
  11. //freopen("abbreviate.out","w",stdout);
  12. scanf("%d",&n);
  13. for(i=;i<=n;++i) scanf("%s",a[i]);
  14. for(i=;i<=n;++i)
  15. for(j=;j<=n;++j){
  16. if(i!=j){
  17. int ret=;
  18. for(k=;k<strlen(a[i])&&k<strlen(a[j]);++k){
  19. if(a[i][k]==a[j][k]) ret++;
  20. else{
  21. ans[i]=max(ret,ans[i]);
  22. break;
  23. }
  24. }
  25. }
  26. }
  27. for(i=;i<=n;++i){
  28. for(j=;j<=ans[i];++j) printf("%c",a[i][j]);
  29. printf("\n");
  30. }
  31. return ;
  32. }

题3  火星上的加法运算(madition

  1. 【问题描述】
  2. 最近欢欢看到一本有关火星的书籍,其中她被一个加法运算所困惑,由于她的运算水平有限,想向你求助,作为一名优秀的程序员,你当然义不容辞。
  3. 【文件输入】
  4. 输入文件第一行输入一个运算的进制N(<=n<=),接下来的两行为需要进行运算的字符,其中每个字符串的长度不超过200位,其为N进制的数,其中包括09以及a-z(代表10-)。
  5. 【文件输出】
  6. 输出文件内容为在N进制下这两个数的和。
  7. 【输入样例1
  8.  
  9. abcdefghij
  10. 【输出样例1
  11. bdfi02467j
  12. 【输入样例2
  13.  
  14. 99999jjjjj
  15.  
  16. 【输出样例2
  17. iiiij00000

题目

tag:高精度

思路:模拟高精度加法,注意去前导0。

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<algorithm>
  5. using namespace std;
  6. char ys1[],a1[],b1[],c[];
  7. int ys2[],a2[],b2[],n,i,lena,lenb,lenc;
  8. void init()
  9. {
  10. for(i=;i<=;++i) ys1[i]=''+i;
  11. for(i=;i<=;++i) ys1[i]='a'+i-;
  12. for(i=;i<=;++i) ys2[i]=i-;
  13. for(i=;i<=;++i) ys2[i]=i-;
  14. }
  15. int main()
  16. {
  17. //freopen("Madition.in","r",stdin);
  18. //freopen("Madition.out","w",stdout);
  19. init();
  20. scanf("%d",&n);
  21. scanf("%s",a1);
  22. scanf("%s",b1);
  23. lena=strlen(a1),lenb=strlen(b1),lenc=max(lena,lenb);
  24. for(i=;i<lena;++i) a2[lena-i-]=ys2[a1[i]];
  25. for(i=;i<lenb;++i) b2[lenb-i-]=ys2[b1[i]];
  26. for(i=;i<lenc;++i){
  27. c[i]+=a2[i]+b2[i];
  28. c[i+]+=c[i]/n;
  29. c[i]%=n;
  30. }
  31. if(c[lenc]) lenc++;
  32. while(!c[lenc-]&&lenc-) lenc--;
  33. for(i=lenc-;i>=;--i) printf("%c",ys1[c[i]]);
  34. return ;
  35. }

题4  队列安排(arrange)

  1. 【问题描述】
  2. 一个学校里老师要将班上N个同学排成一列,同学被编号为1N,他采取如下的方法:
  3. . 先将1号同学安排进队列,这时队列中只有他一个人;
  4. . N号同学依次入列,编号为i的同学入列方式为:老师指定编号为i的同学站在编号为1i -1中某位同学(即之前已经入列的同学)的左边或右边;
  5. . 从队列中去掉MM<N)个同学,其他同学位置顺序不变。
  6. 在所有同学按照上述方法队列排列完毕后,老师想知道从左到右所有同学的编号。
  7. 【输入文件】
  8. 输入文件arrange.in的第1行为一个正整数N,表示了有N个同学。
  9. 2~第N行,第i行包含两个整数kp,其中k为小于i的正整数,p0或者1。若p0,则表示将i号同学插入到k号同学的左边,p1则表示插入到右边。
  10. N+1行为一个正整数M,表示去掉的同学数目。
  11. 接下来M行,每行一个正整数x,表示将x号同学从队列中移去,如果x号同学已经不在队列中则忽略这一条指令。
  12. 【输出文件】
  13. 输入文件arrange.out仅包括1行,包含最多N个空格隔开的正整数,表示了队列从左到右所有同学的编号,行末换行且无空格。
  14. 【样例输入】
  15.  
  16. 【样例输出】
  17.  
  18. 【样例说明】
  19. 将同学2插入至同学1左边,此时队列为:
  20.  
  21. 将同学3插入至同学2右边,此时队列为:
  22.  
  23. 将同学4插入至同学1左边,此时队列为:
  24.  
  25. 将同学3从队列中移出,此时队列为:
  26.  
  27. 同学3已经不在队列中,忽略最后一条指令
  28. 最终队列:
  29.  
  30. 【数据规模与约定】
  31. 对于20%的数据,有N≤;
  32. 对于40%的数据,有N≤;
  33. 对于100%的数据,有N, M≤。

题目

tag:链表

思路:裸的链表。(可以不用像我写的这么麻烦,你可以用下面这个来理解、当模版)

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<algorithm>
  5. #define maxn 100010
  6. using namespace std;
  7. int pre[maxn],Next[maxn],head,tail,i,n,m;
  8. int read()
  9. {
  10. int x=;
  11. char ch=getchar();
  12. while(ch<''||ch>'') ch=getchar();
  13. while(ch>=''&&ch<=''){
  14. x=x*+ch-'';
  15. ch=getchar();
  16. }
  17. return x;
  18. }
  19. void add(int x,int y,int o)
  20. {
  21. if(o){
  22. if(y==tail){
  23. Next[y]=x;
  24. pre[x]=y;
  25. tail=x;
  26. }
  27. else{
  28. pre[x]=y;
  29. Next[x]=Next[y];
  30. pre[Next[y]]=x;
  31. Next[y]=x;
  32. }
  33. }
  34. else{
  35. if(y==head){
  36. Next[x]=y;
  37. pre[y]=x;
  38. head=x;
  39. }
  40. else{
  41. Next[x]=y;
  42. pre[x]=pre[y];
  43. Next[pre[y]]=x;
  44. pre[y]=x;
  45. }
  46. }
  47. }
  48. void del(int x)
  49. {
  50. if(x==head){
  51. head=Next[x];
  52. pre[Next[x]]=;
  53. }
  54. else if(x==tail){
  55. tail=pre[x];
  56. Next[pre[x]]=;
  57. }
  58. else{
  59. Next[pre[x]]=Next[x];
  60. pre[Next[x]]=pre[x];
  61. }
  62. pre[x]=Next[x]=;
  63. }
  64. int main()
  65. {
  66. //freopen("arrange.in","r",stdin);
  67. //freopen("arrange.out","w",stdout);
  68. int y,o;
  69. scanf("%d",&n);
  70. head=tail=;
  71. for(i=;i<=n;++i){
  72. y=read();
  73. o=read();
  74. add(i,y,o);
  75. }
  76. scanf("%d",&m);
  77. for(i=;i<=m;++i){
  78. y=read();
  79. if(pre[y]||Next[y]) del(y);
  80. }
  81. for(i=head;i;i=Next[i]) printf("%d ",i);
  82. return ;
  83. }

┈━═┈━═┈━═┈━═┈━═┈━═┈━═┈━═华丽分割线┈━═┈━═┈━═┈━═┈━═┈━═┈━═┈━═☆

  芒果君:其实这次题目的难度对我来说……然而只拿了一半分,比如链表我本来有足够信心拿全分结果少写了2行代码……出完成绩还没一刻钟就改到AK了,有点郁闷,不过听一听古风歌心情就好多啦~这个解题报告写得比较简略不过实在没什么好写的?怎么说呢,还是要把自己的状态调整好,千万不要随便受影响了,顺其自然吧。

结束。

冲刺Noip2017模拟赛1 解题报告——五十岚芒果酱的更多相关文章

  1. 冲刺Noip2017模拟赛2 解题报告——五十岚芒果酱

    题1 牛跑步(running) [题目描述] 新牛到部队,CG 要求它们每天早上搞晨跑,从 A 农场跑到 B 农场.从 A 农场到 B 农场中有 n- 个路口,分别标上号,A 农场为 号,B 农场为 ...

  2. 冲刺Noip2017模拟赛5 解题报告——五十岚芒果酱

    1. 公约数(gcd) [问题描述] 给定一个正整数,在[,n]的范围内,求出有多少个无序数对(a,b)满足 gcd(a,b)=a xor b. [输入格式] 输入共一行,一个正整数n. [输出格式] ...

  3. 冲刺Noip2017模拟赛3 解题报告——五十岚芒果酱

    题1  素数 [问题描述] 给定一个正整数N,询问1到N中有多少个素数. [输入格式]primenum.in 一个正整数N. [输出格式]primenum.out 一个数Ans,表示1到N中有多少个素 ...

  4. 冲刺Noip2017模拟赛8 解题报告——五十岚芒果酱

    1.鼎纹 [问题描述] 据说鼎纹的 种制造 式是 铜模印出来的,这是我国古代劳动 智慧 的结晶.铜模印过的地 ,会留下深深的印记,经过时间的炼化,洗 练成历史的遗存. 聪明的古代劳动人民拥有一个 a ...

  5. 冲刺Noip2017模拟赛7 解题报告——五十岚芒果酱

    1.二叉树(binary) .二叉树 (binary.cpp/c/pas) [问题描述] 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: ()若左子树不空,则左子树上所有结点的值均小于它的根结 ...

  6. 冲刺Noip2017模拟赛6 解题报告——五十岚芒果酱

    1.ksum(ksum) [问题描述] Peter喜欢玩数组.NOIP这天,他从Jason手里得到了大小为n的一个正整数 数组. Peter求出了这个数组的所有子段和,并将这n(n+)/2个数降序排序 ...

  7. 冲刺Noip2017模拟赛4 解题报告——五十岚芒果酱

    题1 韬韬抢苹果(apple) [问题描述] 又到了收获的季节,树上结了许多韬韬,错了,是许多苹果,有很多个小韬韬都来摘苹 果.每个韬韬都想要最大的苹果,所以发生了争执,为了解决他们的矛盾,出题人定了 ...

  8. 20161005 NOIP 模拟赛 T2 解题报告

    beautiful 2.1 题目描述 一个长度为 n 的序列,对于每个位置 i 的数 ai 都有一个优美值,其定义是:找到序列中最 长的一段 [l, r],满足 l ≤ i ≤ r,且 [l, r] ...

  9. 【HHHOJ】NOIP模拟赛 玖 解题报告

    点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...

随机推荐

  1. 总结 1121 Java面向对象

    总结 Java面向对象的基础 三大特征: 封装(抽象),继承,多态 面向对象的内存分析: 栈, 堆, 代码区, 静态区 this: 代表当前对象本身 有时候需要把当前调用对象进行传递,那么就可以使用t ...

  2. HDU 6125 - Free from square | 2017 Multi-University Training Contest 7

    思路来自这里 - - /* HDU 6125 - Free from square [ 分组,状压,DP ] | 2017 Multi-University Training Contest 7 题意 ...

  3. Luogu P2151 [SDOI2009]HH去散步 矩乘加速DP

    思路:矩乘优化DP 提交:3次(用了一个奇怪的东西导致常数过大) 题解: 如果可以走完正向边后又走反向边那就显然了,但是不能走,所以我们要将正反向边分别编号,区分正反向边. 所以这道题的矩阵是以边的编 ...

  4. numpy基础一

    常用,常忘 1.随机矩阵 np.random.rand(4,3) array([[ 0.06679473, 0.71073515, 0.5694172 ], [ 0.95018143, 0.60161 ...

  5. JavaScript中BOM的重要内容总结

    一.BOM介绍 BOM(Browser Object Model),浏览器对象模型: 用来操作浏览器部分功能的API: BOM由一系列的对象构成,由于主要用于管理窗口和窗口之间的通讯,所以核心对象是w ...

  6. 如何用 Windows Live Writer 和 Word 2013 分别发表博客到Cnblog 和CSDN

    ps CSDN 老是505错误,放弃了 为什么会写这篇 最近写博客在 Cnblog 上面写博客, 发现图片不能复制了直接粘贴上,这对于把博客当随手笔记的人来说无疑非常痛苦.求助于博客园,他们让我用 W ...

  7. vue 重置data中表单form的值 重置变量

    export default { data() { return { form:{ name:"张三", age:13, sex:1, address:"" } ...

  8. [linux]sudo 出现unable to resolve host 解决方法

    Ubuntu环境, 假设这台机器名字(hostname)叫abc, 每次执行sudo 就出现这个警告讯息:sudo: unable to resolve host abc虽然sudo 还是可以正常执行 ...

  9. fatal: unable to access 'https://github.com/Homebrew/brew/'

    最近安装 Homebrew 遇到的坑,总结一下. 我的 Mac 版本是 10.13.6. 首先安装 Homebrew /usr/bin/ruby -e "$(curl -fsSL https ...

  10. SpringBoot配置JDBC连接MySql数据库的时候遇到了报错:HikariPool-1 - Exception during pool initialization

    使用SpringBoot做JAVA开发时,JDBC连接MySql数据库的时候遇到了报错: ERROR 10392 --- [ main] com.zaxxer.hikari.pool.HikariPo ...