2025“钉耙编程”中国大学生算法设计春季联赛(2)(2 4 5,补3 6 8)

news/2025/3/18 21:02:11/文章来源:https://www.cnblogs.com/graspppp/p/18779761

2025“钉耙编程”中国大学生算法设计春季联赛(2)(2 4 5,补3 6 8)

1002:烂人方法

#include<bits/stdc++.h>
#define N 1005
#define mod 998244353
using namespace std;
typedef long long ll;
string a[] = {"jia","yi","bing","ding","wu","ji","geng","xin","ren","gui","jia","yi","bing","ding","wu","ji","geng","xin","ren","gui","jia","yi","bing","ding","wu","ji","geng","xin","ren","gui","jia","yi","bing","ding","wu","ji","geng","xin","ren","gui","jia","yi","bing","ding","wu","ji","geng","xin","ren","gui","jia","yi","bing","ding","wu","ji","geng","xin","ren","gui","jia","yi","bing","ding","wu","ji","geng","xin","ren","gui"};
//string b[] = {"zi","chou","yin","chen","si","wu","wei","shen","you","xv","hai","zi","chou","yin","chen","si","wu","wei","shen","you","xv","hai","zi","chou","yin","chen","si","wu","wei","shen","you","xv","hai","zi","chou","yin","chen","si","wu","wei","shen","you","xv","hai","zi","chou","yin","chen","si","wu","wei","shen","you","xv","hai","zi","chou","yin","chen","si","wu","wei","shen","you","xv","hai","zi","chou","yin","chen","si","wu","wei","shen","you","xv","hai""zi","chou","yin","chen","si","wu","wei","shen","you","xv","hai","zi","chou","yin","chen","si","wu","wei","shen","you","xv","hai","zi","chou","yin","chen","si","wu","wei","shen","you","xv","hai"};
string b[] = {"zi","chou","yin","mao","chen","si","wu","wei","shen","you","xu","hai","zi","chou","yin","mao","chen","si","wu","wei","shen","you","xu","hai","zi","chou","yin","mao","chen","si","wu","wei","shen","you","xu","hai","zi","chou","yin","mao","chen","si","wu","wei","shen","you","xu","hai","zi","chou","yin","mao","chen","si","wu","wei","shen","you","xu","hai","zi","chou","yin","mao","chen","si","wu","wei","shen","you","xu","hai","zi","chou","yin","mao","chen","si","wu","wei","shen","you","xu","hai"};
void solve()
{string s;cin>>s;int i = 0;while(1){string c;c =  a[i]+b[i];//cout<<c;if(c == s){cout<<1984+i<<"\n";return;}i++;}
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int T = 1;cin>>T;while(T--)solve();return 0;
}

1004:暴力dp

#include<bits/stdc++.h>
#define N 1005
#define mod 998244353
using namespace std;
typedef long long ll;
int f[10005];
void solve()
{string s1,s2;cin>>s1>>s2;int u = 0;if(s2.size() <= 2){while(!s2.empty()){u*=10;u += s2[0]-'0';s2.erase(0,1);}if(u >= 26){map<char,int>mp;for(int i = 0;i < s1.size();i++){if(mp[s1[i]])   mp[s1[i]]++;}cout<<mp.size()<<"\n";}else{string s;while(u--){s+=s1;}int ans = 0;for(int i = 0;i < s.size();i++){f[i] = 1;for(int j = 0;j < i;j++){if(s[j] < s[i]) {f[i] = max(f[i],f[j]+1);}}}for(int i = 1;i < s.size();i++) ans = max(ans,f[i]);cout<<ans<<"\n";}}else{map<char,int>mp;for(int i = 0;i < s1.size();i++){if(mp[s1[i]])   mp[s1[i]]++;}cout<<mp.size()<<"\n";}
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int T = 1;cin>>T;while(T--)solve();return 0;
}

1005:理性分析

idea:

如果 ( k ) 是奇数,则答案为 0。

先讨论 ( k = 2 ) 的情形,此时有 ( \lceil n/2 \rceil ) 条平行 ( l_0 ) 的直线和 ( \lfloor n/2 \rfloor ) 条垂直 ( l_0 ) 的直线,答案就是二者的积。

对于 ( k > 2 ) 的情形,可以把所有 ( l_i ) 按照 ( i \mod (k/2) ) 分组,此时有 ( n \mod (k/2) ) 组直线有 ( \lfloor n/k \rfloor + 1 ) 条,另外 ( (k/2) - (n \mod (k/2)) ) 组直线有 ( \lfloor n/k \rfloor ) 条。显然垂直的直线都在同一个组内,并且每一个组自身都是一个 ( k = 2 ) 的情形,套用上面的结论即可。

#include<bits/stdc++.h>
#define N 1005
#define mod 998244353
using namespace std;
typedef long long ll;void solve()
{int n,k;cin>>n>>k;if(k%2!=0){cout<<0<<"\n";return ;}ll m = k/2;if(m > n-1){cout<<0<<"\n";return ;}ll q = (n-1)/m;ll maxj = (q-1)/2;if(maxj < 0){cout<<0<<"\n";return ;}ll cnt = maxj+1;ll ans = cnt*n-m*cnt*cnt;cout<<ans<<"\n";
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int T = 1;cin>>T;while(T--)solve();return 0;
}

1003:

idea:关键在于找到第三个数字使得(p,0,p,q)能够为答案做出贡献,所以可以用从后往前map来记录一个数字首次出现的位置。再次从前往后遍历,如果p出现了超过两次,那么拿他首次出现位置和目前0的位置比较,如果x[p]<0,那么他就对答案做出贡献,其贡献即为当前>0的数字的后缀和,同时把当前的x[p]标记为inf,那么后面再次遍历到p的时候其则没有贡献

注意:这里的关键从后往前遍历找p首先出现的位置以及从前往后遍历0的位置,如果p只出现一次(后面即使有0,mp[a[i]]也不会再次出现)或者0的位置没有更新,那么p对答案不产生贡献

#include<bits/stdc++.h>
#define mod 998244353
using namespace std;
typedef long long ll;
const int N = 1e9+7;
int cnt[1000005];
void solve()
{ll n;memset(cnt,0,sizeof(cnt));cin>>n;vector<int>a(n+1);//1 1 1 1 0 1 3    1 0 1 2      2 0 2 2        3 5 7 8 9 1 0 2 2 0 0  for(int i = 1;i <= n;i++)    cin>>a[i];unordered_map<int,int>mp;int last0 = 0;vector<int>ans(n+2,0);for(int i = n;i >= 1;i--){if(a[i] == 0){ans[i] = ans[i+1];continue;}ans[i] = ans[i+1] + (mp[a[i]]==0);//cnt[a[i]] = i;mp[a[i]] = i;}ll res = 0;for(int i = 1;i <= n;i++){if(a[i] == 0){last0 = i;continue;}if(mp[a[i]] < last0){res += ans[i+1];mp[a[i]] = N;}}cout<<res<<"\n";
}
signed main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int T = 1;cin>>T;while(T--)solve();return 0;
}

1006:博弈论,guess题

推荐佬的博客【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(2) - 天天超方的 - 博客园

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;void solve()
{ll n,m,k;cin>>n>>m>>k;if((n+2*m)%4)	cout<<"Alice\n";else	cout<<"Bob\n";
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr),cout.tie(nullptr);int T = 1;cin>>T;while(T--){solve();}
}

1008:拓扑,图

ieda:首先每个点只有3种可能的颜色ac2ef8459f28471f9dd3f1c43fe1e99d

至于怎么推的我也guess了半天,如果某个块出现了直接no即可

如果都成立,那么这个点一定是属于后面的状态(即是最后一次经过的)此时只需要从另外两种颜色向这个颜色连一条边,表示这个点是后面经过的

最后进行拓扑排序,如果存在环,那么则不满足条件

#include<bits/stdc++.h>
#define N 100005
#define mod 998244353
using namespace std;
typedef long long ll;
#define int long longvoid solve()
{int n,k;cin>>n>>k;vector<vector<int>>g(3*n+1);vector<int>in(3*n+1,0);bool ok = 1;    while(k--){int x,y,z;cin>>x>>y>>z;int q = (y+1)/2,p = 2*n-x+1,r = 2*n+x-y/2;if(!ok) continue;if(z!=q && z!=p && z!=r){ok = 0;continue;}if(z == q){g[r].push_back(z);g[p].push_back(z);}else if(z == p){g[q].push_back(z);g[r].push_back(z);}else if(z == r){g[q].push_back(z);g[p].push_back(z);}in[z] += 2;}if(!ok){cout<<"No\n";return ;}auto tuopu = [&](){queue<int>q;for(int i = 1;i <= 3*n;i++){if(!in[i]){q.push(i);//找到入度为0的点}}while(!q.empty()){int now = q.front();q.pop();for(auto &i:g[now]){if((--in[i]) == 0){q.push(i);}}}for(int i = 1;i <= 3*n;i++){if(in[i])   return false;}return true;};if(tuopu()) cout<<"Yes\n";else    cout<<"No\n";
}
signed main()
{ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int T = 1;cin>>T;while(T--)solve();return 0;
}

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

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

相关文章

.NET周刊【3月第2期 2025-03-09】

国内文章 记一次.NET内存居高不下排查解决与启示 https://www.cnblogs.com/huangsheng/p/18731382 本文讲述了一个ASP.NET Core gRPC服务迁移到Kubernetes后的内存管理问题。服务在K8s上遇到了高内存占用与副本扩展的问题,经过排查发现服务的内存请求设置正确,但未设定上限。…

Agent 智能体创作大赛+参赛小分队召集

与大家分享一个 agent 比赛「智能体全球创作大赛」。你可以用任何趁手的工具打造一个 agent,分享你对人机协作未来的畅想。大赛公告发布出去后,不少社区伙伴都表示有兴趣参与,所以我们决定建一个「RTE 参赛小分队」微信群 ,愿意一起分享想法和讨论技术,一起赶 deadline(3…

HTML打包EXE离线一机一码使用详细教程

近期有些朋友对于HTML打包EXE的网络一机一码验证和离线一机一码验证不太理解,本篇文章主要介绍离线一机一码的使用。相较于需要联网验证的方案,离线版本的优势在于无需连接服务器,通过本地生成的机器码与激活码即可完成授权验证,更适合对数据安全性要求较高,无法联网的项目…

Breach2.1

Breach2.1 信息收集 全端口扫描 ┌──(root㉿kali)-[~/vulnhub/Breach2.1] └─# nmap -sS 192.168.110.151 -p 1-65535 Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-03-18 09:39 CST Stats: 0:00:13 elapsed; 0 hosts completed (0 up), 1 undergoing ARP Ping Scan…

Breach2

Breach2.1 信息收集 全端口扫描 ┌──(root㉿kali)-[~/vulnhub/Breach2.1] └─# nmap -sS 192.168.110.151 -p 1-65535 Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-03-18 09:39 CST Stats: 0:00:13 elapsed; 0 hosts completed (0 up), 1 undergoing ARP Ping Scan…

HTML打包工具EXE工具一机一码激活码计算器小程序版

近期我们收到一些HTML一键打包EXE工具老用户反馈, 他们在使用一机一码离线功能的时候, 遇到如下的问题:外调试时突然需要激活码,手边没电脑急死人!客户现场网络受限,手机能操作就好了每次都要开电脑太麻烦,能移动端解决吗? 解决方案 针对用户集中反馈的"离线激活码…

20222227 实验一《Python程序设计》实验报告

20222227 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2222 姓名: 赫连紫阳 学号: 20222227 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 一、实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的…

【STM32】超好用的开源按键状态系统lwbtn,以及超详细的移植教程

在 button_event_handler 按钮事件处理函数中,按键按下分为:按下,释放;按下类型又分为:单击、双击、持续按下。 这每一个状态/事件,进行过后,其都会进行一次回调,即回到主函数一次,故也是分为了1、按下 2、释放 3、单击 4、双击 5、持续按下 五个回调状态。 你可以在 …

rp2040笔记[1]-使用embassy实现呼吸灯并通过命令行切换状态

使用rust的embassy在rp2040芯片核心板实现呼吸灯.摘要 使用rust的embassy在rp2040芯片核心板实现呼吸灯. 关键词 rust;embassy;rp2040;blink;pwm; 关键信息项目地址:[https://github.com/ByeIO/byeefree.rp2040_quad.embassy][package] edition = "2021" name = &quo…

014 登入页-Element-Plus的图标引入和使用

1、安装图标 2、使用 这里我们用全局注册的方法 放到这里 现在我们换一种方式 在src文件夹里面 新建文件夹global,都是一些全局的东西(这个就叫全局注册) 新建文件register-icons.ts (注册图标)这页这样写这段代码是使用 JavaScript(或可能是 TypeScript,从 app: any…

20242405 实验一《Python程序设计》实验报告

20242405 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2424 姓名: 孙煜麟 学号:20242405 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 1.实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能 3.编写程序,练习…