[考试记录] 2024.11.16 noip模拟赛14

news/2024/11/16 18:05:31/文章来源:https://www.cnblogs.com/xiaolemc/p/18549616

T1 字符串构造机

考虑将一个 LCP 条件拆分成两个,一个是相等的部分,使用并查集维护,另一个是不等的部分,两个串末尾的字符一定不相等,随便那啥维护。对于非法情况就是在同一个相等联通块内有不相等的条件。然后考虑从前往后贪心即可。

#include<bits/stdc++.h>
using namespace std;
#define p pair<int, int>
constexpr int N = 1e3 + 5;
int n, m, s[N], f[N], g[N][2], tot;
inline int find(int k){ return f[k] ? f[k] = find(f[k]) : k; }
vector<int> G[N]; bitset<N> st;
int main(){freopen("str.in", "r", stdin); freopen("str.out", "w", stdout);ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin>>n>>m;for(int i=1, x, y, z; i<=m; ++i){cin>>x>>y>>z; if(x > y) swap(x, y);int l1 = x, l2 = y, r1 = x+z-1, r2 = y+z-1;if(x == y) continue;if(r2+1 <= n) g[++tot][0] = r1+1, g[tot][1] = r2+1;for(int u=l2, v=l1; u<=r2; ++u, ++v){int fa = find(u), fb = find(v);if(fa == fb) continue;f[fa] = fb;}} memset(s, 0xff, sizeof(int) * (n+1));for(int i=1; i<=tot; ++i){int u = find(g[i][0]), v = find(g[i][1]);if(u == v) return cout<<"-1", 0;G[u].push_back(v), G[v].push_back(u);}for(int i=1; i<=n; ++i){int fa = find(i);if(s[fa] == -1){st.reset();for(int v : G[fa]) if(s[find(v)] != -1)st[s[find(v)]] = 1;int cnt = 0;while(st[cnt]) ++cnt;s[fa] = cnt;} s[i] = s[fa];}for(int i=1; i<=n; ++i) cout<<s[i]<<' ';return 0;
}

T2 忍者小队

最大值是简单的。找到所有 \(k\) 的倍数并取个 gcd,如果这个 gcd 不为 \(k\),那么不存在合法的最大最小。否则最大值就为倍数的数量。

考虑最小值答案值域,一定为 \(1\sim 7\)。因为最多质数组成数最大仅为 \(2*3*5*7*11*13*17\)。那么令 \(f_{i,k}\) 表示有 \(i\) 个数 gcd 为 \(k\) 的方案数。考虑容斥,有:

\[f_{i,j}=\binom{cnt}{i}-\sum_{j=2k,j|k}^{V}f_{i,j} \]

其中 \(cnt\) 为倍数数量。用方案数来 check 即可。

#include<bits/stdc++.h>
using namespace std;
constexpr int N = 3e5 + 5, M = 1e9 + 7;
int n, m, a[N], val[N], mx, f[8][N], ans[N][2], C[N][8], tot[N];
inline int add(initializer_list<int> Add){int res = 0;for(int v : Add) res = res + v >= M ? res + v - M : res + v;return res;
}
int main(){freopen("sor.in", "r", stdin); freopen("sor.out", "w", stdout);ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin>>n>>m; for(int i=1; i<=n; ++i) cin>>a[i], ++val[a[i]], mx = max(mx, a[i]);for(int i=0; i<=n; ++i) C[i][0] = 1;for(int i=1; i<=n; ++i) for(int j=1; j<=7; ++j) C[i][j] = add({C[i-1][j], C[i-1][j-1]});for(int i=1; i<=mx; ++i) ans[i][0] = 114514;for(int k=1; k<=mx; ++k){int tmp = 0, sum = 0;for(int i=1; i*k<=mx; ++i) if(val[i*k])tmp = __gcd(tmp, i), sum += val[i*k];tot[k] = sum;if(tmp ^ 1) { ans[k][1] = ans[k][0] = -1; continue; }ans[k][1] = sum; if(val[k]) ans[k][0] = 1;}for(int k=mx; k>=1; --k){for(int i=1; i<=7; ++i){f[i][k] = C[tot[k]][i];for(int j=k*2; j<=mx; j+=k) f[i][k] = add({f[i][k], M-f[i][j]});if(f[i][k] && ans[k][0] == 114514) ans[k][0] = i;}}for(int i=1; i<=m; ++i) cout<<ans[i][0]<<' '<<ans[i][1]<<'\n';return 0;
}

T3 狗卡

来不及写了……👀

#include<bits/stdc++.h>
using namespace std;
constexpr int B = 1 << 15;
char buf[B], *p1 = buf, *p2 = buf;
#define gt() (p1==p2 && (p2=(p1=buf)+fread(buf, 1, B, stdin), p1==p2) ? EOF : *p1++)
template <typename T> inline void rd(T &x){x = 0; int f = 0; char ch = gt();for(; !isdigit(ch); ch = gt()) f ^= ch == '-';for(; isdigit(ch); ch = gt()) x = (x<<1) + (x<<3) + (ch^48);x = f ? -x : x;
}
template <typename T, typename ...TT> inline void rd(T &x, TT &...y){ rd(x), rd(y...); }
constexpr int N = 1.2e6 + 5;
struct Seg{ int id, l, r, len; long long sum; };
vector<int> a[N];
vector<Seg> vec;
int main(){freopen("dog.in", "r", stdin); freopen("dog.out", "w", stdout);int n; long long m; rd(n ,m); for(int i=1, k; i<=n; ++i){rd(k); for(int j=1, x; j<=k; ++j)rd(x), a[i].emplace_back(x);vec.emplace_back(Seg{i, 0, 0, 1, a[i][0]});for(int j=1; j<k; ++j){Seg tmp = vec.back();if((long long)a[i][j] * tmp.len <= tmp.sum){vec.pop_back(); tmp.r = j, ++tmp.len, tmp.sum += a[i][j];while(!vec.empty() && vec.back().id == i && vec.back().sum * tmp.len > tmp.sum * vec.back().len){tmp.l = vec.back().l, tmp.len += vec.back().len, tmp.sum += vec.back().sum;vec.pop_back();} vec.emplace_back(tmp);} else vec.emplace_back(Seg{i, j, j, 1, a[i][j]});}}sort(vec.begin(), vec.end(), [](Seg x, Seg y){return x.sum * y.len < y.sum * x.len;});long long sum = 0, ans = 0;for(auto it : vec){for(int i=it.l; i<=it.r; ++i){ans += m - a[it.id][i] - sum;sum += a[it.id][i];}} return printf("%lld", ans), 0;
}

T4 怪盗德基

#include<bits/stdc++.h>
using namespace std;
int n, a[11][11], len[11], pos[11][11], f[1024][11][11][11][11];
bitset<11> ok[11][11];
inline int dfs(int s, int l, int x, int r, int y){if(!x && y == len[r] && s == (1 << n) - 1) return 0;if(f[s][l][x][r][y] != -1) return f[s][l][x][r][y];int res = 114;if(l < n && !x){for(int i=0; i<n; ++i) if(!(1 & (s>>i)))for(int j=0; j<len[i]; ++j) if(ok[i][j][l])res = min(res, dfs(s|(1<<i), i, j, r, y));res = min(res, dfs(s, n, 0, r, y));}for(int i=0; i<n; ++i) if(!(1 & (s>>i)) && ok[r][y][i])res = min(res, dfs(s|(1<<i), l, x, i, 0));for(int i=1; i<=9; ++i){bool flag1 = x && a[l][x-1] == i, flag2 = y < len[r] && a[r][y] == i;if(flag1 && pos[r][i] <= y) res = min(res, dfs(s, l, x-1, r, y) + 1);if(flag2 && pos[l][i] <= x) res = min(res, dfs(s, l, x, r, y+1) + 1);if(flag1 && flag2) res = min(res, dfs(s, l, x-1, r, y+1) + 1);}return f[s][l][x][r][y] = res;
}
int main(){freopen("hidden.in", "r", stdin); freopen("hidden.out", "w", stdout);ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);memset(pos, 0x3f, sizeof(pos));cin>>n; for(int i=0, x, j=0; i<n; len[i]=j, j=0, ++i)while(cin>>x && x) a[i][pos[i][x] = j++] = x;for(int i=1; i<=9; ++i) pos[n][i] = 0;auto check = [&](int i, int j, int z){for(int k=0; k<len[z]; ++k){if(j < len[i] && pos[i][a[z][k]] == j) ++j;else if(pos[i][a[z][k]] > j) return false;} return j == len[i];};for(int i=0; i<n; ++i) for(int j=0; j<len[i]; ++j) for(int z=0; z<n; ++z)ok[i][j][z] = check(i, j, z);for(int i=0; i<n; ++i) ok[i][0][n] = ok[n][0][i] = true;memset(f, 0xff, sizeof(f)); int ans = 114;for(int i=0; i<n; ++i) ans = min(ans, dfs(1<<i, i, len[i], n, 0));return cout<<(ans >= 114 ? -1 : ans), 0;
}

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

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

相关文章

Meissonic 文生图模型:小参数,超轻量,本地部署推理教程

阿里巴巴等联合推出的 Meissonic 文生图模型,仅 1B 参数,能在普通电脑及未来无线端运行推理。本文将详细展示其在笔记本上的本地部署教程,带你领略 Meissonic 的独特魅力与强大功能……最近,阿里巴巴集团、Skywork AI 携手香港科技大学及其广州校区、浙江大学、加州大学伯克…

大模型应用开发基础 : 语言模型的重要里程碑

本文快速复习了基于统计的语言模型的基本玩法,然后介绍了语言模型发展过程中的三个重要里程碑:神经概率语言模型、词向量模型 和 预训练模型。基于这几个里程碑的发展,开启了NLP处理的新纪元,我们可以基于经过预训练的大模型进行微调,进而处理我们自己业务领域的实际问题。…

第七章 事务

事务是应用程序将多个读写操作组合成一个逻辑单元的一种方式 从概念上讲,事务中的所有读写操作被视作单个操作来执行:整个事务要么成功(提交(commit))要么失败(中止(abort),回滚(rollback))。如果失败,应用程序可以安全地重试。 并不是所有的应用都需要事务,有时…

AI摧毁很多岗位,也会诞生很多新的岗位,如小乔陪玩

未来5年随着AI革命带来的全球生产效率的提升,将会继续摧毁大量的就业岗位,那么新的产业形态必须来临,那就是情绪价值电商带来的就业,一种新型服务业,国家也会全面支持 情绪价值的提供,线下玩伴,是满足人类基因上的陪伴基因应运而生的项目.真的是一个不错的赛道,对于像我们…

甘特图

甘特图(Gantt chart)又称为横道图、条状图(Bar chart),通过条状图来显示项目、进度和其他时间相关的系统进展的内在关系随着时间进展的情况。

江苏科技大学大二《数据结构》课内实验报告模板答案

江苏科技大学 《数据结构》实验报告 (2024/2025学年第1学期) 学生姓名: 学生学号: 院 系: 计算机学院 专 业: 考核得分: 2024 年 12 月 实验一 线性表的操作 一、实验目的 掌握线性表的基本操作在存储结构上的实现,其中以单链表的操作作为重点。 …

20222315 2024-2025-1 《网络与系统攻防技术》实验六实验报告

1、实验内容 本实践目标是掌握metasploit的用法。 指导书参考Rapid7官网的指导教程。 https://docs.rapid7.com/metasploit/metasploitable-2-exploitability-guide/ 下载官方靶机Metasploitable2,完成下面实验内容。 (1)前期渗透 ①主机发现(可用Aux中的arp_sweep,search…

20222315 2024-2025-1 《网络与系统攻防实验六实验》实验六实验报告

1、实验内容 本实践目标是掌握metasploit的用法。 指导书参考Rapid7官网的指导教程。 https://docs.rapid7.com/metasploit/metasploitable-2-exploitability-guide/ 下载官方靶机Metasploitable2,完成下面实验内容。 (1)前期渗透 ①主机发现(可用Aux中的arp_sweep,search…

《Django 5 By Example》阅读笔记:p165-p210

《Django 5 By Example》学习第6天,p165-p210总结,总计46页。 一、技术总结 1.bookmarks项目 (1)登录认证 作者这里使用的是Django自带的auth。 (2)上传头像 图片处理,使用Pillow。 (3)扩展user 扩展user模型与自带的user使用外键进行关联,命名为profile。 二、英语总结(生…

记录---nextTick用过吗?讲一讲实现思路吧

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣源码实现思路(面试高分回答) 📖 面试官问我 Vue 的 nextTick 原理是怎么实现的,我这样回答: 在调用 this.$nextTick(cb) 之前:存在一个 callbacks 数组,用于存放所有的 cb 回调函数。 存在一个 flushCallbacks 函…

AI|经常崩溃的问题解决

Adobe Illustrator Crashes 网络上大部分说法都是重装AI,兼容性问题,管理员权限或者是版本不对,经测试均无效,甚至出现重装系统这种离谱的办法,正确的解决办法是把首选项的性能里的GPU取消勾选,或者再把电脑的虚拟内存扩大即可。Step1:打开首选项 Step 2:取消勾选GPU性…