news 2026/7/21 0:26:54

noi-2025年12月16号作业

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
noi-2025年12月16号作业

题目:B4407 [语言月赛 202509] 逃避讲题的最好方法是:

网址:https://www.luogu.com.cn/problem/B4407

思路:我们分别使用mx、mn数组记录每一道题的最大值分数和最小分数,同时使用一个e数组来保存每一道题的分数。首先特判,如果人数小于等于2的话,一定要上台,然后我们记录一下要改变的次数并贪心地修改分数,如果需要改变的次数大于c的话,那么就一定要上台。最后,我们判断一下改的是否合格。

知识点:set的使用,思维题

代码:

#include<bits/stdc++.h> #define ll long long #define pii pair<int,int> #define pss pair<string,string> #define fi first #define se second #define pb push_back #define eb emplace_back using namespace std; const int maxn=3e3+100; ll a[maxn][maxn]; int n,m,s; ll mx[maxn],mn[maxn]; set<int>e[maxn]; void solve() { cin>>n>>m>>s; for(int i=1;i<=m;i++) { mx[i]=-1; mn[i]=1e17; e[i].clear(); } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>a[i][j]; mx[j]=max(mx[j],a[i][j]); mn[j]=min(mn[j],a[i][j]); } } for(int j=1;j<=m;j++) { for(int i=1;i<=n;i++) { e[j].insert(a[i][j]); } } int c; cin>>c; if(n<=2) { cout<<"up"<<'\n'; return; } int need=0; for(int i=1;i<=m;i++) { if(a[s][i]!=mx[i]&&a[s][i]!=mn[i]) continue; if(e[i].size()==1) { cout<<"up"<<'\n'; return; } if(a[s][i]==mx[i]) { auto it=e[i].begin(); a[s][i]=(*it)+1; }else{ auto it=e[i].end(); it--; a[s][i]=(*it)-1; } need++; } for(int i=1;i<=m;i++) { mx[i]=-1; mn[i]=1e17; } if(need>c) { cout<<"up"<<'\n'; return; } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { mx[j]=max(mx[j],a[i][j]); mn[j]=min(mn[j],a[i][j]); } } for(int i=1;i<=m;i++) { if(a[s][i]==mx[i]||a[s][i]==mn[i]) { cout<<"up"<<'\n'; return; } } cout<<"down"<<'\n'; } int main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); int _; cin>>_; while(_--) solve(); return 0; }

题目:P1029 [NOIP 2001 普及组] 最大公约数和最小公倍数问题

网址:https://www.luogu.com.cn/problem/P1029

思路:首先,如果y%x!=0的话,那么答案一定为0。接着我们分别对x和y进行质数分解,如果对于对一个质数,x和y的次数不相等的话,那么就有两种可能。

知识点:求质数,质数分解

代码:

#include<bits/stdc++.h> #define ll long long #define pii pair<int,int> #define pss pair<string,string> #define fi first #define se second #define pb push_back #define eb emplace_back using namespace std; const int maxn=2e5+100; ll a[maxn],cnt; int n,m; bool is_pri(ll x) { for(int i=2;i*i<=x;i++) { if(x%i==0) return false; } return true; } void solve() { ll x,y; cin>>x>>y; if(y%x!=0) { cout<<0; return; } for(int i=2;i<=100000;i++) { if(is_pri(i)) { a[++cnt]=i; } } ll ans=1; for(int i=1;i<=cnt;i++) { ll cnt1=0,cnt2=0; while(x%a[i]==0) { x/=a[i]; cnt1++; } while(y%a[i]==0) { cnt2++; y/=a[i]; } if(cnt1!=cnt2) { ans=ans*2; } } cout<<ans<<'\n'; } int main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); int _=1; // cin>>_; while(_--) solve(); return 0; }

题目:P14566 【MX-S12-T1】取模

网址:https://www.luogu.com.cn/problem/P14566

思路:把p从非常大的值一路减小,会发现其实就是对a数组进行压缩。

知识点:思维题

代码:

#include<bits/stdc++.h> #define ll long long #define pii pair<int,int> #define pss pair<string,string> #define fi first #define se second #define pb push_back #define eb emplace_back using namespace std; const int maxn=2e5+100; ll a[maxn]; int n,m; void solve() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } sort(a+1,a+1+n); if(a[n]==0) { cout<<0<<'\n'; return; } ll v1=a[n]-a[1]; for(int i=1;i<=n;i++) { a[i]=a[i]%a[n]; } sort(a+1,a+1+n); ll v2=a[n]-a[1]; cout<<max(v1,v2)<<'\n'; } int main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); int _=1; cin>>_; while(_--) solve(); return 0; }

题目:P12817 [NERC 2021] Deletive Editing

网址:https://www.luogu.com.cn/problem/P12817

思路:我们先从s中找到t,然后再判断一下能否合法删除

知识点:思维题

代码:

#include<bits/stdc++.h> #define ll long long #define pii pair<int,int> #define pss pair<string,string> #define fi first #define se second #define pb push_back #define eb emplace_back using namespace std; const int maxn=2e5+100; ll a[maxn]; int n,m; string s,t; int vis[maxn]; void solve() { cin>>s>>t; if(s==t) { cout<<"YES"<<'\n'; return; } reverse(s.begin(),s.end()); reverse(t.begin(),t.end()); int last=-1; int len=s.length(); for(int i=0;i<len;i++) { vis[i]=0; } for(auto ch1:t) { bool ok=false; for(int i=last+1;i<len;i++) { if(s[i]==ch1) { ok=true; vis[i]=1; last=i; break; } } if(!ok) { cout<<"NO"<<'\n'; return; } } map<char,int>p; for(int i=0;i<len;i++) { if(vis[i]) { if(p[s[i]]) { cout<<"NO"<<'\n'; return; } }else{ p[s[i]]=1; } } cout<<"YES"<<'\n'; } int main(){ ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); int _=1; cin>>_; while(_--) solve(); return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/19 4:07:27

Linux 内存管理:TLB ASID

文章目录1. 前言2. TLB ASID 的硬件支持2.1 概念2.2 TLB 查找3. Linux 下 TLB ASID 管理4. 参考资料1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. TLB ASID 的硬件支持 2.1 概念 什么是 TLB&…

作者头像 李华
网站建设 2026/7/19 11:38:23

基于微信小程序的数字博物馆系统的设计与实现(程序+文档+讲解)

课题介绍在文博资源数字化、展览体验便捷化需求升级的背景下&#xff0c;传统博物馆存在 “线下参观受限、展品解读单一、互动体验不足” 的痛点&#xff0c;基于微信小程序 SpringBoot 构建的数字博物馆系统&#xff0c;适配游客、博物馆管理员、讲解员等角色&#xff0c;实现…

作者头像 李华
网站建设 2026/7/18 16:03:48

代码随想录算法训练营Day49 | Prim算法、Kruskal算法

Prim算法 53. 寻宝&#xff08;第七期模拟笔试&#xff09; 1.思路 本题是最小生成树的模板题&#xff0c;图中有n个节点&#xff0c;那么一定可以用 n-1 条边将所有节点连接到一起&#xff0c;并且总权重最小。 Prim 算法&#xff1a;从一个顶点开始&#xff0c;逐步“生长”…

作者头像 李华
网站建设 2026/7/19 7:06:18

30、Linux软件包管理与源码构建全攻略

Linux软件包管理与源码构建全攻略 在Linux系统中,软件包的管理和源码构建是非常重要的操作。下面将详细介绍DEB文件处理、源码构建以及SRPM安装的相关内容。 1. RPM验证报告字符含义 在RPM验证报告中,有一些特定的字符代表着不同的含义,如下表所示: | 字符 | 含义 | |…

作者头像 李华
网站建设 2026/7/19 10:28:20

Flink Rebalance、Rescale、Shuffle 核心区别

Flink 中的 Rebalance、Rescale、Shuffle 是三种核心的数据流分区策略,用于定义上游算子的并行子任务如何将数据分发到下游算子的并行子任务。三者的核心差异体现在数据分配方式、网络开销、适用场景上,选择不当会直接影响作业的性能和数据分布的均匀性。以下是详细的对比与解…

作者头像 李华
网站建设 2026/7/19 20:26:10

42、Linux编程:软件开发工具探索与实践

Linux编程:软件开发工具探索与实践 1. 编程基础概念 在编程过程中,通常会经历编辑、编译和调试的循环,多数程序员需多次重复此流程,直至程序正确运行。除了掌握这些基本步骤,还需熟悉以下术语和概念: - 变量 :用于存储不同类型的数据,可将其视为数据的占位符,如同…

作者头像 李华