2024 CCPC Liaoning Provincial Contest

tot:赛时是6题723罚时,还是差劲了。省赛,特别是这场省赛,难度低很多。前面4,5题都是签到题。第六题是一个关于闰年的容斥,脑子乱了,然后越来越绕。然后就没出。出的是一个诈骗题,题面引导你这是计算几何,但是实际上是简单dp,暴力o(n^2)预处理一下就行了。赛时还想着求凸包然后旋转卡壳求凸包直径来预处理,再dp,但是这样是o(n^3)的,然后过了不知道多久突然才发现完全用不上计算几何,直接最普通的枚举区间取max就可以预处理出来了。然后赛后再补了闰年的容斥和一题挺典型的题目,共计8题。

2024CCPC辽宁省赛.pdf

比分幻术

思路:签到。

string str;
void solve(){cin>>str;cout<<str[2]<<str[1]<<str[0];
}

爱上字典

思路:签到。

string str;
int n;
string toLower(string s){int len=(int)s.size();string res="";for(int i=0;i<len;i++){if(s[i]>='A'&&s[i]<='Z') res+=s[i]+32;else res+=s[i];}return res;
}
void solve(){   //Agetline(cin,str);str=toLower(str);cin>>n;unordered_map<string,bool> mp;for(int i=1;i<=n;i++){string s; cin>>s;mp[toLower(s)]=true;}string cur="";int ans=0;for(int i=0;i<(int)str.size();i++){if(str[i]>='a'&&str[i]<='z') cur+=str[i];else if(cur!=""){if(!mp[cur]) ans++,mp[cur]=true;cur="";}}cout<<ans;
}

结课风云

思路:签到。

int n,a,b,c,d;
int x[1003],y[1003];
void solve(){       //Jcin>>n>>a>>b>>c;for(int i=1;i<=n;i++) cin>>x[i]>>y[i];cin>>d;int ans=0;for(int i=1;i<=n;i++){if(x[i]+y[i]>=c) continue;x[i]=min(a,x[i]+d);if(x[i]+y[i]>=c) ans++;}cout<<ans;
}

插排串联

思路:用multiset存一下每个排插的大小,然后在回溯的时候判断是否有满足条件的排插即可。

int n;
int arr[100005];
vector<int> vct[100005];
multiset<int> st;  //用了set,给去重了。。不能去重。。
bool ans=true;
int dfs(int s){if((int)vct[s].size()==0) return arr[s];int res=0;for(auto v:vct[s]) res+=dfs(v);if(s==0&&res>2200) ans=false;else if(s==0) return 0;auto p=st.lower_bound(res);if(p==st.end()) ans=false;else st.erase(p);return res;
}
void solve(){       //Ccin>>n;for(int i=1;i<=n;i++){int x; cin>>x>>arr[i];vct[x].emplace_back(i);}for(int i=1;i<=n;i++) if((int)vct[i].size()!=0) st.emplace(arr[i]);dfs(0);ans?cout<<"YES":cout<<"NO";
}

都市叠高

思路:题目误导你这题是计算几何,实则只是普通的dp。一开始的确被误导了,很后面才反应过来o(n^2)就能预处理出要的信息了。简单dp。

int n;
typedef struct Point{int x,y;
}Point;
Point point[5005];
double dist(Point a,Point b){ return sqrt( (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y) ); }
double dp[5005];
double mx[5005][5005];  //dist[i][j]定义为:从i往后连续j个构成的凸包直径.
void solve(){cout<<setprecision(10);cin>>n;for(int i=1;i<=n;i++) cin>>point[i].x>>point[i].y;for(int i=1;i<=n;i++){double mx0=0;for(int j=i+1;j<=n;j++){mx0=max(mx0,dist(point[i],point[j]));mx[i][j]=mx0;}}for(int i=1;i<=n;i++){for(int j=1;j<=i;j++){dp[i]=max(dp[i],dp[i-j]+mx[i-j+1][i]);}}cout<<dp[n];
}

俄式简餐

思路:队友写的构造。注意判6的情况就行。

void solve(){       //Eint n, m;cin >> n >> m;vector g(n + 10, vector<int>(m + 10));int cnt = 1;if (n == 2 && m == 2 || n * m % 4) {cout << "NO" << endl;return ;}if (n % 4 == 0) {for (int j = 1; j <= m; j ++) {for (int i = 1; i <= n; i += 4) {g[i][j] = g[i + 1][j] = g[i + 2][j] = g[i + 3][j] = cnt;cnt ++;}}} else if (m % 4 == 0) {for (int i = 1; i <= n; i ++) {for (int j = 1; j <= m; j += 4) {g[i][j] = g[i][j + 1] = g[i][j + 2] = g[i][j + 3] = cnt;cnt ++;}}} else if ( n % 2 == 0 && m % 2 == 0) {if (n % 6 == 0) {for (int j = 1; j <= m; j += 2) {for (int i = 1; i <= n; i += 6) {g[i][j] = g[i][j + 1] = g[i + 1][j] = g[i + 2][j] = cnt++;g[i + 3][j] = g[i + 4][j] = g[i + 5][j] = g[i + 5][j + 1] = cnt ++;g[i + 1][j + 1] = g[i + 2][j + 1] = g[i + 3][j + 1] = g[i + 4][j + 1] = cnt ++;}}} else if (n % 6 == 4) {for (int j = 1; j <= m; j += 2) {for (int i = 1; i <= n - 4; i += 6) {g[i][j] = g[i][j + 1] = g[i + 1][j] = g[i + 2][j] = cnt++;g[i + 3][j] = g[i + 4][j] = g[i + 5][j] = g[i + 5][j + 1] = cnt ++;g[i + 1][j + 1] = g[i + 2][j + 1] = g[i + 3][j + 1] = g[i + 4][j + 1] = cnt ++;}}for (int j = 1; j <= m; j ++) {g[n][j] = g[n - 1][j] = g[n - 2][j] = g[n - 3][j] = cnt;cnt ++;}} else if (m % 6 == 0) {for (int i = 1; i <= n; i += 2) {for (int j = 1; j <= m; j += 6) {g[i][j] = g[i + 1][j] = g[i][j + 1] = g[i][j + 2] = cnt++;g[i][j + 3] = g[i][j + 4] = g[i][j + 5] = g[i + 1][j + 5] = cnt ++;g[i + 1][j + 1] = g[i + 1][j + 2] = g[i + 1][j + 3] = g[i + 1][j + 4] = cnt ++;}}} else if (m % 6 == 4) {for (int i = 1; i <= n; i += 2) {for (int j = 1; j <= m - 4; j += 6) {g[i][j] = g[i + 1][j] = g[i][j + 1] = g[i][j + 2] = cnt++;g[i][j + 3] = g[i][j + 4] = g[i][j + 5] = g[i + 1][j + 5] = cnt ++;g[i + 1][j + 1] = g[i + 1][j + 2] = g[i + 1][j + 3] = g[i + 1][j + 4] = cnt ++;}}for (int i = 1; i <= n; i ++) {g[i][m] = g[i][m - 1] = g[i][m - 2] = g[i][m - 3] = cnt;cnt ++;}} else if (n % 4 == 2 && n != 2) {for (int j = 1; j <= m; j ++) {for (int i = 1; i <= n - 6; i += 4) {g[i][j] = g[i + 1][j] = g[i + 2][j] = g[i + 3][j] = cnt ++;}}for (int j = 1; j <= m; j += 2) {g[n - 5][j] = g[n - 4][j] = g[n - 3][j] = g[n - 5][j + 1] = cnt ++;g[n - 2][j] = g[n - 1][j] = g[n][j] = g[n][j + 1] = cnt ++;g[n - 4][j + 1] = g[n - 3][j + 1] = g[n - 2][j + 1] = g[n - 1][j + 1] = cnt ++;}} else if (m % 4 == 2) {
//            cout << "------" << endl;for (int i = 1; i <= n; i ++) {for (int j = 1; j <= m - 6; j += 4) {g[i][j] = g[i][j + 1] = g[i][j + 2] = g[i][j + 3] = cnt;cnt ++;}}for (int i = 1; i <= n; i += 2) {g[i][m - 5] = g[i][m - 4] = g[i][m - 3] = g[i + 1][m - 5] = cnt ++;g[i][m - 2] = g[i][m - 1] = g[i][m] = g[i + 1][m] = cnt ++;g[i + 1][m - 4] = g[i + 1][m - 3] = g[i + 1][m - 2] = g[i + 1][m - 1] = cnt ++;}}}cout << "YES" << endl;
//    return ;for (int i = 1; i <= n; i ++) {for (int j = 1; j <= m; j ++) {cout << g[i][j] << ' ';}cout << endl;}
}

龙之研习

思路:

        n 整除 4×100^p 但不整除 100^(p+1);
        式子①:x/4*100^p;
        式子②:x/100^(p+1);
        这里①是:x整除4*100^p的都是闰年,但是其中②是平年,所以要减去.
        同时,②还有去重的作用,因为下一个p是:x/4*100^(p+1),这里的x/4*100^(p+1)按理来说已经被上一个算过了
        但是因为上一个同时还有②,那么会把属于x/4*100(p+1)的部分给减去了,同时更高次方的也会减去..
        其他的次方是同理的,如此下来,是没有算重算漏的.

int n;
inline int cal(int x){  //计算2025~x的平年的个数int run=0,run0=0,x0=2024,q=1;for(int p=0;p<=8;p++){// n 整除 4×100^p 但不整除 100^(p+1);//式子①:x/4*100^p;//式子②:x/100^(p+1);//这里①是:x整除4*100^p的都是闰年,但是其中②是平年,所以要减去.//同时,②还有去重的作用,因为下一个p是:x/4*100^(p+1),这里的x/4*100^(p+1)按理来说已经被上一个算过了//但是因为上一个同时还有②,那么会把属于x/4*100(p+1)的部分给减去了,同时更高次方的也会减去..//其他的次方是同理的,如此下来,是没有算重算漏的.run+=x/(4*q)-x/(q*100);run0+=x0/(4*q)-x0/(q*100);q*=100;}return (x-run)-(x0-run0);
}
void solve(){cin>>n;int l=2025,r=4e18,ans=-1;while(l<=r){int mid=(l+r)>>1ll;if(cal(mid)>=n){  //这里得是>=号,不然可能取不到最小值..也不能直接对(ans,mid)取min.ans=mid;r=mid-1;}else l=mid+1;}cout<<ans<<endl;
}

顾影自怜

思路:

不懂不懂..没思路...一开始想着很混乱,最大值是不同数字,又是隔开的,又是区间的,还要满足k个..晕..
key:这个时候就要考虑,需要什么信息?可以预处理出来吗?
①也不难..可以"预处理"之后,o(1)知道每个数字左边和右边第一个比它大的位置.
②也可以o(1)知道每个数字从此位置起,往右直至其出现k次的位置在哪里.
③还可以维护每个数字,上一次出现的位置.
有了以上三个信息,可以枚举"每个位置作为第一个最大值"时,可以得到的贡献.
即合法的左区间为(max(lmx,last),i],合法的右区间为[nex,rmx). last为上一个当前数字的位置,nex第k次出现当前数字的位置.
key:其实以前做过类似的题,应该是st表写的.也是只考虑每个点,对全部右区间的贡献,而对于左区间,只考虑到上一个当前数字为止.
这样就不会算重算漏.
ps:这题的官方题解是有问题的..
int n,k;
int arr[1000006];
vector<int> vct[1000006];
vector<int> mp(1000006,0);
vector<bool> vis(1000006,false);
int last[1000006]; //上一个当前数字出现的位置.
int nex[1000006];  //下一个出现k次当数字的位置.
int lmx[1000006];  //左边第一个大于当前数字的位置.
int rmx[1000006];  //右边第一个大于当前数字的位置.
//不懂不懂..没思路...一开始想着很混乱,最大值是不同数字,又是隔开的,又是区间的,还要满足k个..晕..
//key:这个时候就要考虑,需要什么信息?可以预处理出来吗?
//①也不难..可以"预处理"之后,o(1)知道每个数字左边和右边第一个比它大的位置.
//②也可以o(1)知道每个数字从此位置起,往右直至其出现k次的位置在哪里.
//③还可以维护每个数字,上一次出现的位置.
//有了以上三个信息,可以枚举"每个位置作为第一个最大值"时,可以得到的贡献.
//即合法的左区间为(max(lmx,last),i],合法的右区间为[nex,rmx). last为上一个当前数字的位置,nex第k次出现当前数字的位置.
key:其实以前做过类似的题,应该是st表写的.也是只考虑每个点,对全部右区间的贡献,而对于左区间,只考虑到上一个当前数字为止.
这样就不会算重算漏.
//顾影自怜--这题官方题解是有问题的..
//https://codeforces.com/group/L9GOcnr1dm/contest/564037/attachments/download/28062/statements.pdf
void solve(){       //Gcin>>n>>k;for(int i=1;i<=n+2;i++) vct[i].clear(),mp[i]=0,vis[i]=false,last[i]=0,nex[i]=0,lmx[i]=0,rmx[i]=0;for(int i=1;i<=n;i++) {cin>>arr[i];last[i]=mp[arr[i]];mp[arr[i]]=i;vct[arr[i]].emplace_back(i); //可知第k个arr[i]的位置.}if(k==1){} //最多的情况是(n+(1+n))/2,爆int...一开始没开longlong,怕MLE.然后wa2了,但是实际上完全不会MLE..也不用特判.stack<int> stk; //单调栈.for(int i=1;i<=n;i++){while(!stk.empty()&&arr[i]>=arr[stk.top()]) stk.pop();if(!stk.empty()) lmx[i]=stk.top();stk.emplace(i);  //这里不用判条件了,直接入栈}while(!stk.empty()) stk.pop();for(int i=n;i>=1;i--){while(!stk.empty()&&arr[i]>=arr[stk.top()]) stk.pop();if(!stk.empty()) rmx[i]=stk.top();else rmx[i]=n+1;stk.emplace(i); //这里不用判条件了,直接入栈}for(int i=1;i<=n;i++){if(vis[arr[i]]) continue;vis[arr[i]]=true;for(int j=0;j+k-1<(int)vct[arr[i]].size();j++){nex[vct[arr[i]][j]]=vct[arr[i]][j+k-1];}}int ans=0;for(int i=1;i<=n;i++){if(!nex[i]||nex[i]>rmx[i]) continue;int l=max(lmx[i],last[i])+1;int r=rmx[i]-1;ans+=(i-l+1)*(r-nex[i]+1);}cout<<ans<<endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/59733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用k8s管理应用以及java案例

使用k8s管理应用 制作镜像控制器管理podpod数据持久化创建service四层代理创建ingress规则对外发布应用日志与监控应用案例(因无开发代码&#xff0c;最终跑不起来)编写java代码编写 Dockerfile构建 Docker 镜像在 Kubernetes 上运行应用程序创建 Kubernetes 服务service创建in…

【论文阅读笔记】CamoFormer: Masked Separable Attention for Camouflaged Object Detection

1.论文介绍 CamoFormer: Masked Separable Attention for Camouflaged Object Detection CamoFormer&#xff1a;用于隐藏目标检测的掩蔽可分离注意力 TPAMI 2024 Paper Code 2.摘要 如何从背景中识别和分割隐藏的对象是一个挑战。受transformer中多头自注意的启发&#xf…

【从零开始的LeetCode-算法】3254. 长度为 K 的子数组的能量值 I

给你一个长度为 n 的整数数组 nums 和一个正整数 k 。一个数组的 能量值 定义为&#xff1a; 如果 所有 元素都是依次 连续 且 上升 的&#xff0c;那么能量值为 最大 的元素。否则为 -1 。 你需要求出 nums 中所有长度为 k 的子数组的能量值。 请你返回一个长度为 n - k 1…

LLMs之PDF:zeroX(一款PDF到Markdown 的视觉模型转换工具)的简介、安装和使用方法、案例应用之详细攻略

LLMs之PDF&#xff1a;zeroX(一款PDF到Markdown 的视觉模型转换工具)的简介、安装和使用方法、案例应用之详细攻略 目录 zeroX的简介 1、支持的文件类型 zeroX的安装和使用方法 T1、Node.js 版本&#xff1a; 安装 使用方法 使用文件 URL&#xff1a; 使用本地路径&…

【使用 Python 和 ADB 检查 Android 设备的 Wi-Fi 状态】

引言 在现代移动设备中,Wi-Fi 连接的稳定性和安全性至关重要。本文将介绍如何使用 Python 和 ADB(Android Debug Bridge)命令来检查 Android 设备的 Wi-Fi 连接状态,包括获取连接的 SSID、信号强度、链路速度、频段和安全类型。我们将编写一个 Python 脚本,该脚本能够解析…

htop-2.2.0在arm64上的手工编译

背景&#xff1a;在一款国产的arm上的linux 64位的系统上&#xff0c;没有htop&#xff0c;这里是手工交叉编译的部分笔记 文章目录 写在前面下载包二、编译脚本1.ncurses2.htop之后我会把压缩包放在这里 资源 写在前面 因为种种原因&#xff0c;需要手工编译 网上有几篇&…

qt QStandardItemModel详解

1、概述 QStandardItemModel是Qt框架中提供的一个基于项的模型类&#xff0c;用于存储和管理数据&#xff0c;这些数据可以以表格的形式展示在视图控件&#xff08;如QTableView、QTreeView等&#xff09;中。QStandardItemModel支持丰富的数据操作&#xff0c;包括添加、删除…

docker安装zookeeper,以及zk可视化界面介绍

1. zookeeper 1.1. zookeeper简单介绍 ZooKeeper 是一个分布式的开源协调服务,最初由 Apache Hadoop 项目开发,用于构建分布式应用程序。它提供了一个简单的接口,允许开发人员实现诸如配置维护、域名服务、分布式同步、组服务等常见任务。ZooKeeper 的设计目标是提供高性能…

思源笔记轻松连接本地Ollama大语言模型,开启AI写作新体验!

文章目录 前言1. 下载运行Ollama框架2. Ollama下载大语言模型3. 思源笔记设置连接Ollama4. 测试笔记智能辅助写作5. 安装Cpolar工具6. 配置Ollama公网地址7. 笔记设置远程连接Ollama8. 固定Ollama公网地址 前言 今天我们要聊聊如何通过cpolar内网穿透技术&#xff0c;把国产笔…

基于C++的决策树C4.5机器学习算法(不调包)

目前玩机器学习的小伙伴&#xff0c;上来就是使用现有的sklearn机器学习包&#xff0c;写两行代码&#xff0c;调调参数就能跑起来&#xff0c;看似方便&#xff0c;实则有时不利于个人能力发展&#xff0c;要知道现在公司需要的算法工程师&#xff0c;不仅仅只是会调参&#x…

这款Chrome 插件,使浏览器页面快速滑动到最底部和最顶部,并且还能...

前言 前几日我在使用谷歌浏览器&#xff0c;也就是chrome的时候&#xff0c;浏览一个内容很长的页面&#xff0c;由于页面上的内容有前后关联&#xff0c;所以我必须不停地切换到上面和下面。这非常不方便。使我非常抓狂。后来&#xff0c;我灵机一动&#xff0c;去谷歌浏览器…

汉诺塔问题代码分享及思路分享(c基础)

可以先自己尝试&#xff0c;只要看见过递归即可写。&#xff08;我自己是&#xff09;希望能自己尝试出来。 两种方法迭代比递归快很多.(不发代码的原因是想让你自己动手) 1 递归 2 迭代 猜数游戏是自己写的第一个有互动的程序。对我很有意义。 我绑定资源了的&#xff0c;大…

第9章 Apache WEB服务器企业实战

万维网 (WORLD WIDE WEB,WWW)服务器,也称之为WEB服务器,主要功能是提供网上信息浏览服务。WWW是 Internet的多媒体信息查询工具,是Internet上飞快发展的服务,也是目前用的最广泛的服务。正是因为有了WWW软件,才使得近年来 Internet 迅速发展。 目前主流的WEB服务器软件包…

第10章 MYSQL服务器企业实战

MySQL是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 本章介绍关系型数据库特…

【初阶数据结构与算法】沉浸式刷题之顺序表练习(顺序表以及双指针两种方法)

文章目录 顺序表练习1.移除数组中指定的元素方法1&#xff08;顺序表&#xff09;方法2&#xff08;双指针&#xff09; 2.删除有序数组中的重复项方法1&#xff08;顺序表&#xff09;方法2&#xff08;双指针&#xff09; 3.双指针练习之合并两个有序数组方法1&#xff08;直…

【flask开启进程,前端内容图片化并转pdf-会议签到补充】

flask开启进程,前端内容图片化并转pdf-会议签到补充 flask及flask-socketio开启threading页面内容转图片转pdf流程前端主js代码内容转图片-browser端browser端的同步编程flask的主要功能route,def 总结 用到了pdf,来回数据转发和合成,担心flask卡顿,响应差,于是刚好看到threadi…

PADS的GND难解之谜——GND铺不上捅?GND焊盘上全是绿色叉号?

PADS难解之谜——GND覆不上铜&#xff1f;焊盘上全是叉号&#xff1f; 文章目录 PADS难解之谜——GND覆不上铜&#xff1f;焊盘上全是叉号&#xff1f;1、GND灌铜灌不上&#xff1f;2、GND焊盘上全是绿色叉号&#xff1f; 如果对你有帮助&#xff0c;就点赞收藏把&#xff01;(…

02- 模块化编程-007 Ltc1684( ADC16-Bit)采样显示

1、Ltc1684芯片介绍 该芯片是一款高精度的16位模数转换器(ADC)&#xff0c;适合于高精度仪器的开发&#xff0c;它能提供精准的模拟信号到数字信号的转换。 特性 采用 MSOP 封装的 16 位、250ksps ADC 单 5V 电源 低电源电流&#xff1a;850μA (典型值) 自动停机功能可把电源…

信息安全工程师(80)网络安全测评技术与工具

前言 网络安全测评是评估信息系统、网络和应用程序的安全性&#xff0c;以发现潜在的漏洞和威胁&#xff0c;并确保系统符合安全标准和政策的过程。 一、网络安全测评技术 渗透测试&#xff08;Penetration Testing&#xff09; 描述&#xff1a;通过模拟真实的攻击&#xff0c…

SQL(2)

一.时间盲注 有回显时用Union带出数据&#xff0c;只显示是否时可用布尔盲注得出数据&#xff0c;那如果没有任何输出时&#xff1f; 比如无论查询什么&#xff0c;都显示success&#xff0c;同一个回应&#xff0c;无法直接从服务器注入出任何数据&#xff0c;但是我们可以利…