题目

题目地址:PAT 乙级 1059

题解

开始我是从暴力循环的角度考虑这道题,大概计算了一下时间复杂度应该不会超,但是很不幸没有通过,时间超限;之后考虑搜索算法可能优化不太好,因此就把输入的序列先排序,之后用了二分查找,结果复杂度还是超(现在想想,实际上暴力循环和先排序后二分的复杂度差不多);

通过的方法是通过输入的ID号作为数组的下标,那么在查找的过程中就简化为线性,O(1)的复杂度就不会存在任何问题,同时只需要通过整数类型的数组和bool类型的数组就能解决所有访问问题,与之前的结构体存储的复杂度完全不是一个量级,这是一个非常好的思路;再加上之前做的一道题,学习了一种新的输出控制方式,因此也能够通过int类型方式输出题目规定的格式;

通过这道题主要学到以下几点:

1. 暴力循环不是解决问题的唯一方式,做题的过程中考虑一下是否能通过下标定位的方式,思考问题的方式不要过于单一;

2. 判断素数的循环条件需要特别注意

 for (int i = ; i <= sqrt(n); i++) {        //注意循环结束条件是<=
if (n % i == )
return false;
}
return true;

3. 输出过程中位数不够需要补0,那么可以使用printf格式控制符,printf("%04d\n", num);    //输出num不足4位在之前补0

代码

 #include <iostream>
#include <cmath>
using namespace std; bool prime(int n) {
if (n == )
return true;
else{
for (int i = ; i <= sqrt(n); i++) {
if (n % i == )
return false;
}
}
return true;
} int main() {
int n = , k = , tmp = ;
int stu[] = { };
bool flag[] = { };
cin >> n;
for (int i = ; i <= n; i++) {
cin >> tmp;
stu[tmp] = i;
}
cin >> k;
for (int i = ; i < k; i++) {
cin >> tmp;
if (stu[tmp] == )
printf("%04d: Are you kidding?\n", tmp);
else if (stu[tmp] == && !flag[tmp]) {
printf("%04d: Mystery Award\n", tmp);
flag[tmp] = true;
}
else if (prime(stu[tmp]) && !flag[tmp]) {
printf("%04d: Minion\n", tmp);
flag[tmp] = true;
}
else if (!prime(stu[tmp]) && !flag[tmp]) {
printf("%04d: Chocolate\n", tmp);
flag[tmp] = true;
}
else
printf("%04d: Checked\n", tmp);
} return ;
}

最新文章

  1. CUDA代码移植
  2. 工作偶遇小bug
  3. 生成模型(Generative)和判别模型(Discriminative)
  4. Definition of success-成功的定义
  5. &lt;&lt;UML大战需求分析&gt;&gt;阅读笔记(2)
  6. thinkphp笔记16-20集
  7. DS Tree 已知先序、中序 =&gt; 建树 =&gt; 求后序
  8. C# 中将多个空格替换成一个空格
  9. 天灵灵,地灵灵,但愿这个一定灵!!!python调用win32api,启动应用程序窗口
  10. input text 字体的影响
  11. gcc编译命令
  12. JavaScript对象属性 constructor
  13. Java贪吃蛇游戏
  14. Gentoo双网卡同时启用上内外网
  15. HDFS概述(2)————Block块大小设置
  16. Java-ServletContext
  17. Codeforces Round #463 F. Escape Through Leaf (李超线段树合并)
  18. Laravel-Excel 导入 Excel 文件----为什么只获取到最后一行数据?
  19. [Z] SQL SERVER 的前世今生--各版本功能对比
  20. Spring MVC 教程,快速入门,深入分析[1-11]

热门文章

  1. std::ref() 与 &amp;
  2. Unity 行为树-共享变量
  3. 牛客假日团队赛1 J.分组
  4. Java中常用的数据源
  5. DB2的常用数据类型
  6. Lecture--9 Sorting
  7. Python2.7编程基础(博主推荐)
  8. htaccess转换httpd.ini方法及案例参考
  9. JSTL截取字符串以及格式化时间
  10. android 开发-Process and Thread