您的位置:首页 > 大数据 > 人工智能

【图书馆书目检索】解题报告

2011-11-10 09:24 1046 查看


题目描述

图书馆馆长正犯愁呢,原来,有一堆的书要他整理,每本书都有一个书号(<=200000),现在他有一本书,这本书的书号为K(<=200000),现在他要找出一本书号比这本书大的书和书号比这本小的书(但都要最接近图书馆馆长已有的书号),将找到的这两本书的书号加起来,并算出加起来以后的数是否为素数


输入格式

第一行二个数为N,K,表示几本书以及已有书的书号(<=200000)

第二行开始有N个整数,表示这些书的书号


输出格式

第一行一个数,表示两本书书号加起来的和

第二行一个字符,表示和是否为素数,若是则输出"Y"否则输出"F"(引号不打出)

一道模拟题,我用来练习一下STL。先把k删了,二分搜索堆中找到第一个比k大的,第一个比k小的就用迭代器自减得到。

//#include <iostream>
//using std::cout;
//using std::cin;
#include <cstdio>
#include <cmath>
#include <map>
using std::make_pair;
const long oo = 0x7fff0000;

long n;long k;
std::map<long,long> book;

int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);

scanf("%ld%ld",&n,&k);
for (long i=1;i<n+1;i++)
{
long a;
scanf("%ld",&a);
book.insert(make_pair(a,a));
}
book.erase(k);
long r = (--book.upper_bound(k))->first;
long l = book.upper_bound(k)->first;
printf("%ld\n",r+l);

long c = r+l;

for (long i=2;i<sqrt(c);i++)
{
if (c%i==0){printf("F");return 0;}
}
printf("Y");return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  pair c oo