当前位置: 首页 > news >正文

CF1349

今天又来水博客了(雾)

A.Orac and LCM

计算给定序列中所有元素两两最小公倍数组成的集合的最大公约数。

处理一下式子就可以得到

\(\dfrac {\gcd(\lbrace a_i*a_j \space \vert \space i<j\rbrace)} {\gcd(a_1,a_2\ldotp\ldotp\ldotp a_n)}\)

下面的直接求,上面的枚举一维,剩下一维前缀 \(\gcd\) 即可

code:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a[200005],sum[200005],ans;
signed main(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];sum[i]=__gcd(sum[i-1],a[i]);}for(int i=1;i<=n;i++){ans=__gcd(ans,a[i]*sum[i-1]);}cout<<ans/sum[n];
}

B.Orac and Medians

给你一个序列,你每次可以选择一个区间,让这个区间内的所有数全部变成这个区间的中位数,你需要回答最后是否能够将整个序列全部变为 k 。

发现两条性质:

  1. 如果有两个相邻的同样大小的数,那么就可以不断向两边拓展,如果有两个相隔一个的同样大小的也是

  2. 如果两个数去中位数,最后都会变成较小的数

那我们直接让任意一个k左边或右面是比它大的数字即可,那就判断一下是否可以让大于它的数不断拓展就做完了

还有个特判具体看代码

code:

#include<bits/stdc++.h>
using namespace std;
int T,n,k,a[100005];
int main(){cin>>T;while(T--){cin>>n>>k;bool flag=1;for(int i=1;i<=n;i++){cin>>a[i];if(a[i]==k)flag=false;}a[n+1]=0;if(flag){cout<<"no"<<endl;continue;}if(n==1){cout<<"yes"<<endl;continue;}for(int i=2;i<=n;i++){if(a[i-1]>=k&&a[i+1]>=k||a[i]>=k&&a[i-1]>=k){cout<<"yes"<<endl;break;}if(i==n)cout<<"no"<<endl;}}
}

C.Orac and Game of Life

每个格子在每一时间如果周围有相同颜色的话就会取反,每次询问一个格子在某一时间的颜色

发现每一联通块都会振动,并连带着周围的落单的格子一起加入

bfs出联通块,然后找出一个格子被并入哪个联通块,什么时候并入的,连通块初始颜色为什么就好了

code:

int n, m, q;
char s[1010][1010];
int bel[1010][1010];
int tim[1010][1010];
struct Node {int x, y;Node() {}Node(int x, int y):x(x), y(y) {}
};
queue<Node>Q;
inline int chk(Node x) {return 1 <= x.x && x.x <= n && 1 <= x.y && x.y <= m;
}
int main() {memset(bel, -1, sizeof(bel));scanf("%d%d%d", &n, &m, &q);for(int i = 1; i <= n; i++)scanf("%s", s[i] + 1);for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) {int tmp = 0;tmp |= s[i][j] == s[i - 1][j];tmp |= s[i][j] == s[i + 1][j];tmp |= s[i][j] == s[i][j - 1];tmp |= s[i][j] == s[i][j + 1];if(tmp) {bel[i][j] = s[i][j] - 48;Q.push(Node(i, j));}}while(!Q.empty()) {Node x = Q.front(); Q.pop();Node t;t = Node(x.x + 1, x.y);if(chk(t) && bel[t.x][t.y] == -1) Q.push(t), bel[t.x][t.y] = bel[x.x][x.y], tim[t.x][t.y] = tim[x.x][x.y] + 1;t = Node(x.x - 1, x.y);if(chk(t) && bel[t.x][t.y] == -1) Q.push(t), bel[t.x][t.y] = bel[x.x][x.y], tim[t.x][t.y] = tim[x.x][x.y] + 1;t = Node(x.x, x.y + 1);if(chk(t) && bel[t.x][t.y] == -1) Q.push(t), bel[t.x][t.y] = bel[x.x][x.y], tim[t.x][t.y] = tim[x.x][x.y] + 1;t = Node(x.x, x.y - 1);if(chk(t) && bel[t.x][t.y] == -1) Q.push(t), bel[t.x][t.y] = bel[x.x][x.y], tim[t.x][t.y] = tim[x.x][x.y] + 1;}while(q--) {int x = ri, y = ri;ll k = rl;if(bel[x][y] == -1 || k < tim[x][y]) putchar(s[x][y]);else putchar(48 | (bel[x][y] ^ (k & 1)));puts("");}
}

D.Slime and Biscuits

神秘鞅与停时定理与势能函数法,还是黑,也不知道这辈子会不会学这个(逃)

E.Slime and Hats

神秘经典游戏,挺有意思的 但策略没看懂...

挖个坑以后填

F2.Slime and Sequences (Hard Version)

(F1和F2只差数据范围与时限)

前置芝士:

  1. 分式域
  2. (扩展)拉格朗日反演
  3. 欧拉数
  4. 二元 GF

让我做这个?别闹了(再逃)

完结撒花

我怎么还是这么菜
被黑题爆杀了呜呜呜

http://www.hskmm.com/?act=detail&tid=17271

相关文章:

  • 学习敏捷课程PSM,自考证书分享
  • Rust/C/C++ 混合构建 - 用Bazel构建Rust与C
  • 9.24(补)
  • 9月25号
  • CCF CSP-J 2025_from_黄老师_d
  • 亚马逊与AWS如何通过漏洞赏金计划构建深度安全防御
  • sync.pool 面试题
  • 【JavaEE】SpringIoC与SpringDI - 详解
  • 24.Linux硬盘分区管理 - 详解
  • CCF CSP-J 2025_from_黄老师_km
  • AI一周资讯 250918-250925
  • 云栖小镇现场追踪!触摸AI 未来
  • AT_arc154_d [ARC154D] A + B C ?
  • SQL注入-联合注入
  • JVM对象创建与内存分配
  • 目录
  • 交互:在终端中输入用户信息
  • 电脑迁移技巧:适用于 Windows 10/11 的免费磁盘克隆优秀的工具
  • Java学习日记9.18
  • 一种CDN动态加速首次访问加速方法
  • 9.25
  • 字典
  • CF1716题解
  • 使用vosk模型进行语音识别
  • AI Agent如何重塑人力资源管理?易路iBuilder平台实战案例深度解析
  • docker-compose + macvlan + Elasticsearch - 9.1.4 + Kibana - 9.1.4
  • WinForm 计时器 Timer 学习笔记
  • RocketMQ入门:基本概念、安装、本地部署与集群部署 - 详解
  • 【LeetCode】122. 买卖股票的最佳时机 II
  • VSCode 使用技巧笔记