信奥赛-刷题笔记-二分篇-T2-P1918保龄球0529

article/2025/8/14 7:45:16

总题单

本部分总题单如下

【腾讯文档】副本-CSP-JS+NOI 题单 (未完待续)

https://docs.qq.com/sheet/DSmJuVXR4RUNVWWhW?tab=BB08J2

二分篇题单

请在此添加图片描述

P1918 保龄球

https://www.luogu.com.cn/problem/P1918

题目描述

DL 算缘分算得很烦闷,所以常常到体育馆去打保龄球解闷。因为他保龄球已经打了几十年了,所以技术上不成问题,于是他就想玩点新花招。

DL 的视力真的很不错,竟然能够数清楚在他前方十米左右每个位置的瓶子的数量。他突然发现这是一个炫耀自己好视力的借口——他看清远方瓶子的个数后从某个位置发球,这样就能打倒一定数量的瓶子。

  1. ◯ ◯ ◯ \bigcirc \bigcirc \bigcirc

  2. ◯ ◯ ◯ ◯ \bigcirc \bigcirc \bigcirc\ \bigcirc  

  3. ◯ \bigcirc

  4. ◯ ◯ \bigcirc\ \bigcirc  

如上图,每个 “ ◯ \bigcirc ” 代表一个瓶子。如果 DL 想要打倒 3 3 3 个瓶子就在 1 1 1 位置发球,想要打倒 4 4 4 个瓶子就在 2 2 2 位置发球。

现在他想要打倒 m m m 个瓶子。他告诉你每个位置的瓶子数,请你给他一个发球位置。

输入格式

第一行包含一个正整数 n n n,表示位置数。

第二行包含 n n n 个正整数 a i a_i ai ,表示第 i i i 个位置的瓶子数,保证各个位置的瓶子数不同。

第三行包含一个正整数 Q Q Q,表示 DL 发球的次数。

第四行至文件末尾,每行包含一个正整数 m m m,表示 DL 需要打倒 m m m 个瓶子。

输出格式

Q Q Q 行。每行包含一个整数,第 i i i 行的整数表示 DL 第 i i i 次的发球位置。若无解,则输出 0 0 0

输入输出样例 #1

输入 #1

5
1 2 4 3 5
2
4
7

输出 #1

3
0

说明/提示

【数据范围】

对于 50 % 50\% 50% 的数据, 1 ≤ n , Q ≤ 1000 , 1 ≤ a i , m ≤ 10 5 1 \leq n, Q \leq 1000, 1 \leq a_i, m \leq 10^5 1n,Q1000,1ai,m105

对于 100 % 100\% 100% 的数据, 1 ≤ n , Q ≤ 100000 , 1 ≤ a i , m ≤ 10 9 1 \leq n,Q \leq 100000, 1 \leq a_i, m \leq 10^9 1n,Q100000,1ai,m109

代码1-暴力

#include<bits/stdc++.h>using namespace std;
int n,q,tempq;
int arr[100010]; 
int arrq[100010]; 
int main(){cin>>n;for(int i=1;i<=n;i++){scanf("%d",&arr[i]);}
//	for(int i=0;i<n;i++){
//		printf("%d ",arr[i]);
//	}cin>>q; for(int i=1;i<=q;i++){scanf("%d",&arrq[i]);}for(int i=1;i<=q;i++){//		printf("%d",tempq);// 哨兵bool flag = false; // 循环arr 每次都比较一下,如果相等就输出for(int j=1;j<=n;j++){if(arrq[i]==arr[j]){printf("%d\n",j);flag=true;break;}} if(!flag) printf("%d\n",0);}	return 0;
}
/*5
1 2 4 3 5
2
4
7
*/

会得80分

代码2-二分

#include<bits/stdc++.h>using namespace std;
int n,q,tempq;// 结构体保存值和初识坐标
struct blq{int num;int pos;
};blq arr[100010]; 
int arrq[100010]; // 二分查找 
int binary_search(int x){int l=1,r=n;while(l<=r){int mid=(l+r)>>1;if(arr[mid].num==x) return arr[mid].pos;else if(arr[mid].num<x) l=mid+1;else if(arr[mid].num>x) r=mid-1;}return 0;}bool cmp(blq b1,blq b2){if(b1.num>b2.num) return false;else return true;}int main(){cin>>n;for(int i=1;i<=n;i++){scanf("%d",&arr[i].num);arr[i].pos=i;}
//	for(int i=0;i<n;i++){
//		printf("%d ",arr[i]);
//	}cin>>q; for(int i=1;i<=q;i++){scanf("%d",&arrq[i]);}// 对保龄球进行排序sort(arr+1,arr+n+1,cmp);for(int i=1;i<=q;i++){printf("%d\n",binary_search(arrq[i]));}	return 0;
}
/*5
1 2 4 3 5
2
4
7
*/
#include<bits/stdc++.h>using namespace std;
long long n,m,a,ans;
struct data 
{long long h,H;
}N[100005];
bool cmp(data x,data y)
{return x.h<y.h;
}
bool pd(long long A,long long l,long long r)
{long long mid=(l+r)/2;if(N[mid].h==A){ans=N[mid].H;return true; }if(l>r)return false;if(A<=N[mid].h)return pd(A,l,mid-1);else return pd(A,mid+1,r);
}
int main()
{cin>>n;for(long long i=1;i<=n;i++){cin>>N[i].h;N[i].H=i;}sort(N+1,N+1+n,cmp);cin>>m;for(long long i=1;i<=m;i++){cin>>a;if(pd(a,1,n)){cout<<ans<<endl;}else cout<<0<<endl;}return 0;
}

代码3-哈希表

当然可以!下面是对你提供的 C++ 代码进行详细注释头文件引用具体化后的版本。这个程序的功能是:

  • 输入一个整数数组;
  • 对每个查询值,输出它在数组中第一次出现的位置索引(从1开始)
  • 如果该值不在数组中,则输出 0

✅ 完整带注释、具体头文件的版本

#include <cstdio>   // 提供 scanf / printf 等C语言标准输入输出函数
#include <iostream> // 提供 cin / cout 等C++标准输入输出流
#include <unordered_map> // 提供哈希表容器 unordered_map
#include <vector>   // 虽然未使用,但有时用于容器统一管理
using namespace std;// 全局变量声明
int n, q;                       // n表示数组长度,q表示查询次数
int arr[100010];                // 存储输入的数组元素(下标从1开始)
unordered_map<int, int> pos;    // 哈希表:key为数组中的值,value为其第一次出现的下标位置int main() {// 读取数组长度cin >> n;// 读取数组内容,并记录每个数字第一次出现的位置for (int i = 1; i <= n; i++) {scanf("%d", &arr[i]);       // 读取第i个元素// 如果当前数值还没有被记录过,就保存它的位置if (!pos.count(arr[i])) {pos[arr[i]] = i;        // key: 数值,value: 第一次出现的位置}}// 读取查询次数cin >> q;// 处理每个查询for (int i = 0; i < q; i++) {int x;scanf("%d", &x);            // 读取要查询的数值// 在哈希表中查找该数值是否存在if (pos.count(x)) {printf("%d\n", pos[x]); // 存在:输出其第一次出现的位置} else {printf("0\n");          // 不存在:输出0}}return 0;
}

🧠 补充说明

为什么使用 unordered_map
  • unordered_map 是基于哈希表实现的关联容器。
  • 查找、插入、删除操作的平均时间复杂度为 O(1)
  • 非常适合用于这种“根据值查位置”的问题。
为什么记录的是“第一次出现”的位置?
  • 因为我们只在第一次遇到某个值时才写入哈希表。
  • 后续重复出现的值不会覆盖已有的位置信息。
时间复杂度分析
步骤时间复杂度
读取并处理数组O(n)
查询处理O(q)
总体O(n + q)

🚀 小技巧优化建议

如果你希望进一步提高性能(特别是在大数据量的情况下),可以加上以下两行代码来加速 IO 操作:

ios::sync_with_stdio(false);
cin.tie(nullptr);

这两个语句会关闭 cincoutscanf/printf 的同步,加快输入输出速度。


如果你还有其他问题,比如想了解底层原理、调试方法、或想把这个程序改成支持多组数据等,也可以继续问我 😊

现场真题注意事项

https://cspoj.com/contest.php?cid=1002Fus5yz4x3EcSJH1Z

注意事项

文件名(程序名和输入输出文件名)必须使用英文小写。(提交必须使用freopen()进行提交)

C/C++ 中函数 main() 的返回值类型必须是 int,程序正常结束时的返回值必须是0。

提交的程序代码文件的放置位置请参考各省的具体要求。

因违反以上三点而出现的错误或问题,申述时一律不予受理。

若无特殊说明,结果的比较方式为全文比较(过滤行末空格及文末回车)。

程序可使用的栈空间内存限制与题目的内存限制一致。

全国统一评测时采用的机器配置为:Inter® Core™ i7-8700K CPU @3.70GHz,内存 32GB。上述时限以此配置为准。

只提供 Linux 格式附加样例文件。

评测在当前最新公布的 NOI Linux 下进行,各语言的编译器版本以此为准

假设输入样例数据存在文件test.in中,输出样例数据存在文件test.out中,

则在CSP、NOI等比赛的代码中,需添加freopen、fclose语句,

内容详见模板代码如下。

#include <bits/stdc++.h>
#include<cstdio>//必须包含cstdio头文件
#include<iostream>
using namespace std;int main(){freopen("test.in","r",stdin);freopen("test.out","w",stdout);cout<<"Hello NOI"<<endl;fclose(stdin);fclose(stdout);return 0;
}

复制

下面为函数的简介,详细可参见 http://www.cplusplus.com/reference/clibrary/cstdio/freopen.html

函数名:freopen

声明:

FILE _freopen( const char_ path, const char _mode, FILE_ stream );

所在文件: stdio.h

参数说明:

path: 文件名,用于存储输入输出的自定义文件名。

mode: 文件打开的模式。和fopen中的模式(如r-只读, w-写)相同。

stream: 一个文件,通常使用标准流文件。

返回值:成功,则返回一个path所指定文件的指针;失败,返回NULL。(一般可以不使用它的返回值)

功能:实现重定向,把预定义的标准流文件定向到由path指定的文件中。标准流文件具体是指stdin、stdout和stderr。其中stdin是标准输入流,默认为键盘;stdout是标准输出流,默认为屏幕;stderr是标准错误流,一般把屏幕设为默认。通过调用freopen,就可以修改标准流文件的默认值,实现重定向。

#include<iostream>
#include<cstdio>
using namespace std;
int main(){freopen("7532.in", "r", stdin);freopen("7532.out", "w", stdout);//原来的代码保持不变double a, b, r;int k;cin >> a >> b;k = int(a/b);r = a - b * k;printf("%g", r);//-------------fclose(stdin);fclose(stdout);return 0;
}

http://www.hkcw.cn/article/rUwXmfEqwl.shtml

相关文章

10年外卖员提醒一定要点堂食店:入口的东西千万不能马虎

近日,一消费者通过外卖平台购买的某品牌咖啡冰块中惊现完整苍蝇引发网友关注,随着天气逐渐炎热,外卖食品安全问题再次成为消费者关注的焦点。早在去年,央视就曾曝光的外卖平台“幽灵外卖”乱象,不少店铺不仅租借执照,甚至还和废品收购站开在一起,操作间的纱窗上结满了各…

佛山龙舟房东队称队员不都是房东 传承文化凝聚人心

去年端午节,广东佛山的沙步龙船队因队员黎国添的发言在网络上走红,被网友戏称为“房东队”。今年5月27日,有人现场观看了沙步龙船队的传统仪式“拜大廟”,并采访了黎国添本人。他不仅是沙步经济社社长,还是十几套房的房东以及光伏发电公司的老板。黎国添表示,虽然队里有房…

泡泡玛特客服回应黄牛门店扫货:界定存在难度

近日,有卖家在二手市场以8万价格打包转卖51个Labubu,款式均为绝版老款。随着Labubu系列潮流玩具爆火,部分隐藏款、绝版老款在二手市场的价格飙升至数万元。限量版、绝版Labubu二手市场价格飙升。图/二手交易平台截图Labubu是中国香港艺术家龙家升创作的北欧森林精灵形象,是…

上海成人吸烟率下降至18.6% 控烟成效显著

2025年5月30日是第38个“世界无烟日”,上海发布了最新的成人烟草流行调查核心数据。数据显示,上海成人吸烟率降至18.6%,为大陆地区省级最低。当天,以“拒绝烟草诱惑,对第一支烟说‘不’”为主题的宣传活动在上海虹口区举行。根据最新调查,上海成人吸烟率较2023年下降了0.…

友商谈小米YU7实车!

800万粉丝“说车的阿飞”,我记得这位博主还跟雷总一起直播过,人家亲自说明:“这次拍小米YU7,连八百块车马费都没有,就管了个中午的盒饭,几百个人都是纯邀请的,所以有一些媒体老师就会觉得小米不重视他,做内容自然会带着情绪做。”就像车圈那个梗,“800没有万”,导致行…

女子吃皮蛋口腔黏膜竟被灼伤 碱性过强惹的祸

近日,家住武昌区彭刘杨路的李女士吃了一口皮蛋后,口腔居然被灼伤了。口感清爽冰凉的皮蛋为何会灼伤口腔?端午节临近,李女士的友人送给她一盒包含粽子、咸蛋和皮蛋的礼盒。27日中午,李女士剥开一个皮蛋直接咬了一口,立刻感觉嘴里火辣辣的,像是针扎一样疼。她马上把嘴里的…

Linux系统网络管理

目录 一、网络参数配置 1、图形化配置 2、命令行配置 2.1、ifconfig命令 2.2、ifup和ifdown 2.3、ip a[ddress]命令 2.2、配置文件配置 3、路由配置 route命令 一、网络参数配置 1、图形化配置 systemctl start NetworkManager开启 systemctl stop NetworkManager关…

戴尔AI服务器订单激增至121亿美元 业务转型加速

戴尔科技最新财报显示,AI服务器需求的爆炸式增长正在重塑这家老牌PC制造商的业务格局,但也暴露出传统消费业务的疲软以及盈利能力的结构性挑战。周四美股盘后,戴尔公布了2026财年一季度财报,最引人注目的数据是121亿美元的AI服务器订单,这一数字不仅超过了公司整个2025财年…

8人因造谣某茶饮创始人被抓 AI谣言案告破

近日,上海警方成功侦破一起利用人工智能技术编造、传播网络谣言损害企业权益的案件,抓获姚某、陈某等8名犯罪嫌疑人。嫌疑人姚某是一名职业自媒体人,他花费800元在网上找到卢某代笔,利用AI生成了一篇关于沪上某茶饮企业的文章。未经核实,姚某便在十余个自媒体平台账号上发…

计算机组成原理第3章 存储器层次结构(竟成)

目录 第 3 章 存储器层次结构 3.1 存储器概述 3.1.1 存储器的分类 1.按存储介质分类 2.按存取方式分类 &#xff08;1&#xff09;随机存储器&#xff08;Random Access Memory&#xff0c;RAM &#xff09; &#xff08;2&#xff09;只读存储器&#xff08;Read - Only Memor…

贸促会:美工商界密集访华是用脚投票 开放合作成主旋律

5月30日,贸促会举行例行新闻发布会,新闻发言人赵萍出席并介绍了相关情况。会上,赵萍发布了3月全球经贸摩擦指数。数据显示,3月全球经贸摩擦指数为126,处于高位。全球经贸摩擦措施涉及金额同比上升26.1%,环比上升152.3%。监测范围内的20个国家(地区)中,美国和印度的全球…

运维方案,项目运维

1. 文档介绍 2. 人员与责任 3. 运维过程内容 4. 运维资源 5. 运维服务规划保障 6. 事件处置 7. 质量改进 8. 运维边界及内容 获取方式&#xff1a; 本文末个人名片直接获取。

Spring AI 系列2: Advisors增强器简介

一、Advisors简介 1.1 Advisors定义 Advisors 是在 AI 应用程序中处理请求和响应的拦截器。我们可以使用它们为提示流程设置额外的功能。例如&#xff0c;可以建立聊天历史、排除敏感词或为每个请求添加额外的上下文。 Spring AI的Advisor&#xff0c;本质上是一个拦截…

毕业前最后1堂课学生偷偷为老师准备惊喜 青春完美闭环

毕业前最后一课,学生偷偷准备惊喜,360度运镜是青春完美闭环。近日,广东厚街,毕业前最后一堂课,学生偷偷为老师准备惊喜,闪闪发光的不仅是礼花,还有师生之间的真心。网友:360度运镜,是青春完美的闭环。责任编辑:zx0002

团伙侵入某平台刷单骗补50万 警方全链条捣毁犯罪团伙

5月29日,上海警方侦破一起恶意刷单骗取补贴案,全链条捣毁券商、刷手、商户犯罪团伙,抓获犯罪嫌疑人15名。犯罪嫌疑人利用网络技术侵入平台系统后获取大量已下架优惠券,组织刷手、勾结商户虚假下单骗取平台补贴,非法牟利近50万元。2024年底,上海普陀警方接到饿了么负责人报…

美国若向印度提供F-35有何影响?

美国若向印度提供F-35有何影响?近日,美国在讨论是否出售给印度F-35战斗机时,美国国会议员提出警告,千万不要出售F-35战斗机给印度。第一、印度飞行员的训练不足以驾驶F-35战斗机。第二、如果与巴基斯坦开战,如果被击落,价值两万亿美元的F-35计划将彻底消失。这名议员说得…

传统项目管理总拖延?Scrum敏捷全流程拆解

在互联网高速发展的时代&#xff0c;企业竞争的核心要素正逐渐向 "速度" 倾斜。市场环境瞬息万变&#xff0c;用户需求呈现出多元化、动态化的显著特征&#xff0c;而传统管理模式固有的滞后性与僵化性&#xff0c;已难以匹配快速迭代的市场需求。在此背景下&#xf…

金文洙参拜麦克阿瑟铜像 红袍祭祖引热议

金文洙参拜麦克阿瑟铜像 红袍祭祖引热议!74岁的金文洙穿着一件大红色的官服站在墓地前,神情肃穆。乍一看,还以为是哪家新郎官走错了片场。实际上,这是韩国总统候选人金文洙在首露王陵前的祭拜仪式。5月28日,距离韩国大选缺席投票只剩一天,金文洙来到庆尚南道金海市,对着…

碱水粽 传统工艺的独特魅力

碱水粽 传统工艺的独特魅力!端午节的粽子种类越来越丰富,其中碱水粽子深受许多老一辈人的喜爱。在众多粽子中,碱水粽以其金黄透亮、软糯弹牙的独特口感脱颖而出。这种独特口感的关键在于传统工艺制作的天然碱水。制作碱水的原料主要有两种:稻草秸秆和黄荆枝叶。稻草秸秆是农…

Baklib内容中台与企业内容管理区别在哪?

Baklib技术架构优势解析 区别于传统企业内容管理工具侧重文档存储的单一模式&#xff0c;Baklib基于动态知识图谱与统一元数据架构构建智能内容中枢&#xff0c;通过全渠道发布引擎实现多源异构数据的实时映射与语义关联。其技术内核采用模块化设计&#xff0c;支持API接口快速…