CodeM2018 初赛A轮

今晚参加了CodeM2018初赛A,结果只做对了两题……

第1题:求一段字符串对应手机按键移动最少次数。

送分题非常简单,我的解法是一个数组保存A-Z的按键,一个二维数组保存按键之间的距离。读入字符串只需要记住当前的和它的前一个字母,查表加和。排行榜上的大佬们2-5分钟就写完提交,但我实在没那么快。

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main(){int i,j,k,n,T,f,sum;int latterMap[26]={1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,6,7,7,7,8,8,8,8};int distMap[9][9]={{0,1,2,1,2,3,2,3,4},{1,0,1,2,1,2,3,2,3},{2,1,0,3,2,1,4,3,2},{1,2,3,0,1,2,1,2,3},{2,1,2,1,0,1,2,1,2},{3,2,1,2,1,0,3,2,1},{2,3,4,1,2,3,0,1,2},{3,2,3,2,1,2,1,0,1},{4,3,2,3,2,1,2,1,0}};char c,c0,xx[3];scanf("%d",&T);gets(xx);for(k=0;k<T;k++){f=0;sum=0;while(scanf("%c",&c)==1 && c!='\n'){printf("c=%c\n",c);if(f==0){sum+=distMap[0][latterMap[c-'A']];f=1;}else sum+=distMap[latterMap[c0-'A']][latterMap[c-'A']];c0=c;}printf("%d\n",sum);}return 0;
}

第2题: 一个1*n的棋盘上,每个格子放着一些棋子,每个棋子可以向左移,或者向左移动到最左边以后再向右移,给出棋子总数相同的状态A和B,求状态转换需要移动的次数。

这个题本来设想的是从左到右扫描,把第一个状态的棋子挨个转换为第二个状态,移动次数相加。但是提交不对,就去玩了半个时,时间浪的差不多了回来再看,然后发现了这样不对:

应该先从右向左遍历第一个状态的所有棋子,把其中能够只通过左移就能达到第二状态的棋子先减去,然后再从左向右次数相加,再注意数据大小就能通过。

可能这样设想的比较麻烦,大佬们应该有更简便的做法。另外在自己电脑VS根本开不了这么大数组,都是小数组编好,在提交时候再把数组改大。

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int min(int a,int b){return a<b?a:b;
}
int main(){int i,j,k,n,f;long long ans=0;int a[100010],b[100010],num,done,x;scanf("%d",&n); if(n==1){printf("0\n");return 0;}memset(a,0,sizeof(a));b[0]=0;for(i=1;i<=n;i++)scanf("%d",&a[i]);for(i=1;i<=n;i++)scanf("%d",&b[i]);i=n;j=n;while(i>0 && j>0){while(a[i]==0 && i>0)i--;while(b[j]==0 && j>0)j--;while(i<j && j>0)j--;if(i>=j){if(a[i]>=b[j]){ans=ans+b[j]*(long long)(i-j);a[i]=a[i]-b[j];b[j]=0;j--;}if(a[i]<=b[j]){ans=ans+a[i]*(long long)(i-j);b[j]=b[j]-a[i];a[i]=0;i--;}}}for(i=1;i<=n;i++)a[i]=a[i-1]+a[i];j=1;done=0;for(i=1;i<=n;i++){num=b[i];b[i]=b[i-1]+b[i];if(num!=0){while(b[i]>=a[j] && j<=n){if(i<=j){x=min(b[i]-done,(a[j]-done));ans=ans+x*(long long)(j-i);done=done+x;}else if(i>j){x=min(b[i]-done,(a[j]-done));ans=ans+x*(long long)(j+i-2);done=done+x;}j++;}if(j<=n && b[i]>a[j-1] && b[i]<a[j]){if(i<=j){x=min(b[i]-done,(a[j]-done));ans=ans+x*(long long)(j-i);done=done+x;}else if(i>j){x=min(b[i]-done,(a[j]-done));ans=ans+x*(long long)(j+i-2);done=done+x;}}}}printf("%lld\n",ans);return 0;
}

后面题目没来得及看了,最终排名前600,只有前250名才能进复赛,又看了一下去年初赛B轮比A轮难一些,估计复赛无望了(望天)

CodeM2018 初赛A轮 第1,2题相关推荐

  1. CodeM2018美团 初赛A轮 题目二 下棋

    CodeM2018美团 初赛A轮 题目二 下棋 [编程|1000分] 下棋 时间限制:C/C++ 1秒,其他语言 2秒 空间限制:C/C++ 262144K,其他语言 524288K 64bit IO ...

  2. 2021年CSP-J入门级初赛(第一轮)真题讲解

    2017年NOIP普及组初赛真题讲解 2017年NOIP普及组初赛真题讲解_哔哩哔哩_bilibili 2018年NOIP普及组初赛真题讲解 2018年NOIP普及组初赛真题讲解_哔哩哔哩_bilib ...

  3. CodeM美团2018初赛A轮 题目一

    CodeM美团2018初赛A轮 题目一 描述 小美想要在电视上看电影,我们知道在电视上搜索电影可以通过搜索电影名字首字母缩写得到,通过首字母搜索电影的界面由一个九宫格组成,如下图: 光标初始在这个九宫 ...

  4. NOIP历年第二轮入门组真题集合

    NOIP历年第二轮入门组真题集合 年份 题目 题解链接 2000 T1-计算器的改良 T2- 税收与补贴问题 T3-乘积最大 T4-单词接龙 题解链接 2001 T1-数的记数 T2-最大公约数和最小 ...

  5. 【CodeM初赛B轮】A 贪心

    [CodeM初赛B轮]A 题目大意:给你一棵树,起初所有点都是白色的,你每次都能选择一个白点i,将这个点i到根路径上的所有到i的距离<k[i]的点都染成黑色(根和i也算,已经被染成黑色的点还是黑 ...

  6. 2022年 CSP-J1 CSP-S1 初赛 如何进行复习 如何做题

    第一题 单选题: 这个包含了2018年及以前年份的的单选或不定项选择(提高组 初赛) 以及问题求解题等考点 这一部分建议直接做历年的真题就可以了,至少要做最近的5年真题 做题的顺序:由最近往前做,也就 ...

  7. [蓝桥杯2016初赛]剪邮票-dfs+next_permutation(好题)

    题目描述 如下图, 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连) 比如,下面两张图中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少种不 ...

  8. 【初赛】「阅读程序」题答v1.0

    「阅读程序」题答 核心要义:是设法弄清程序的功能,每个题目的写作目的. 一.方法 1.直接模拟:一般适用于T1.T2中的递归题,计算题等没有算法的题. 2.看出算法直接填:最佳方法.需要较多模板,但耗 ...

  9. 【初赛】「程序填空」题答v1.0

    「程序填空」题答 核心要义:是算法基本功和对他人思想的理解. 一.题型 1.变量方面:定义变量的数据类型(声明):设定变量的初值(初始值):对变量的赋值(赋值):根据变量的辖域确定其是全局变量还是某个 ...

最新文章

  1. Android Studio 单刷《第一行代码》系列 04 —— Activity 相关
  2. cpuz北桥频率和内存频率_内存频率怎样计算?一分钟教会你
  3. 关于SQL语言,这些你不得不了解!
  4. MacOS安装app提示已损坏修复指令
  5. Android中如何获取应用版本号
  6. Visual Studio DSL 入门 13---结合T4生成代码
  7. matlab Tricks(二十七)—— 可变输入参数输出参数的适配
  8. VMware CTO: 2009年虚拟化十大预测
  9. Numpy入门(详看注释)
  10. Android控件组合应用四
  11. Arnold渲染用炫云云渲染让我动画制作更轻松了
  12. 2020年的19种最佳React Native App模板(包括5种免费)
  13. mybatisplus删除操作引起的selectBatchIds报错
  14. android:layout_weight权重与warp_content配合使用
  15. dhcp服务器不显示mac地址,利用MAC地址解决无法获得DHCP动态地址分配问题
  16. python股票数据分析_用Python浅析股票数据
  17. 基于pandas、matplotlib、pyecharts的人工智能相关职位招聘市场数据分析
  18. python解压 tar.gz文件
  19. linux 命令查询主机名,linux如何查看主机名?
  20. META-INF/MANIFEST.MF 文件

热门文章

  1. bilibili小电视桌面天气站(esp8266+微信小程序控制)超详细,看这一篇就够了
  2. “老衲印象”开发团队章程
  3. 弘辽科技:淘宝店铺被降权后,流量不短下滑,如何扭转局面
  4. luoguP3600 随机数生成器概率与期望Dp
  5. 【面试篇】前端点滴(css/css3)
  6. Spring内部方法性能监控器
  7. R使用Z分数和四分位数区间法去除异常值(outlier)
  8. 抽象代数 04.07 Jordan-Holder定理
  9. 苹果笔记本能装linux系统吗,为什么很多人买了苹果笔记本后,会重新装一个windows系统?...
  10. 赛扬处理器_英特尔发布11代奔腾、赛扬处理器 均支持AVX指令集