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

牛客周赛 Round 57题解(A - G 无D解)

A-小红喜欢1_牛客周赛 Round 57(重现赛) (nowcoder.com)

void solve()
{int ans = 0;for(int i  = 1;i <= 5;i++){cin >> n;ans = (n == 1 ? i : ans);}cout << ans << endl;
}

B-小红的树切割_牛客周赛 Round 57(重现赛) (nowcoder.com)

相邻的节点颜色相同就剪即可

void solve()
{int ans = 0;string s;cin >> n >> s;s = " " + s;for(int i = 1; i < n; i++){int u, v;cin >> u >> v;ans += (s[u] == s[v]);}cout << ans << endl;
}

C-小红的双好数(easy)_牛客周赛 Round 57(重现赛) (nowcoder.com)

1:首先所有数的2进制一定满足要求 

2:1的所有进制都满足

3:2是只有2进制满足

void solve()
{cin >> n;if(n == 1)cout << "YES" << endl << 2 << ' ' << 3 << endl;else if(n > 2){cout << "YES" << endl;cout << 2 << ' ' << n << endl;}elsecout << "NO" << endl;
}

 D-小红的线段_牛客周赛 Round 57(重现赛) (nowcoder.com)

E-小红的双好数(hard)_牛客周赛 Round 57(重现赛) (nowcoder.com)

暴力搜索即可

bool check(int x, int y)
{while(x){if(x % y > 1) return false;x /= y;}return true;
}void solve()
{int k1, k2;cin >> k1 >> k2;for(int i = k2; i < k2 + 1e6; i++){if(check(i , k1) && check(i, k2)){cout << "YES" << endl << i;return;}}cout << "NO" << endl;
}

F-小红的数组操作_牛客周赛 Round 57(重现赛) (nowcoder.com)

线段树模板

 

G-小红的双排列构造_牛客周赛 Round 57(重现赛) (nowcoder.com)

1:对于n == 1的情况而言区间数只能为2

如下: 1 1

2:对于n == 2的情况无论如何排序其区间数一定不为1

例如: 1 2 1 2 |  2 2 1 1 | 1 1 2 2 找不出为0的解

3:对于其他n而言区间数为[0 , n + 1]

4: 对于非1,2的n而言,k为0的通解就是将2个相同的数放在一起即可

如: 1 1 2 2 3 3

5: 最大的k解排序一定是

1 2 3 …… n 1 2 3 …… n的顺序排列

6:在2 至 n + 1区间数是有规律可言的,这边我直接给一个显著的样例,不必多言

n == 4的前提下

基础排序k值
1 2 3 4 1 2 3 45
2 1 3 4 1 2 3 44
2 3 1 4 1 2 3 43
2 3 4 1 1 2 3 42

7:对于k == 1的样例(n > 2)解是可以直接构造的

通解为 将一个1至n的数组插入另外一个1至n数组的1 和 2之间即可

例 n == 4

1 1 2 3 4 2 3 4

剩下的就是将上述分类讨论得解即可非常简单的一题

void solve()
{cin >> n >> k;if(n == 1 && k < 2 || n == 2 && k < 1){cout << -1 << endl;return;}for(int i = 1;i <= n;i++)a[i] = i;vector<int> v(n + 1);for(int i = 1; i <= n; i++)cin >> v[i];if(k > n + 1){cout << -1 << endl;return;}if(k == 0){for(int i = 1; i <= n; i++)cout << i << ' ' << i << ' ';}else if(k == 1){cout << 1 << ' ';for(int i = 1;i <= n; i++)cout << i << ' ';for(int i = n;i >= 2; i--)cout << i << ' ';}else{int t = n + 1 - k;if(t)swap(a[1] , a[1 + t]);for(int i = 1; i <= n; i++)cout << a[i] << ' ';for(int i = 1; i <= n; i++)cout << i << ' ';}
}


http://www.mrgr.cn/news/10787.html

相关文章:

  • Android studio设置国内镜像代理(HTTP Proxy)教程详解
  • C语言经典案例分享
  • “MongoDB AI应用计划 (MAAP)”正式全面推出
  • 双臂机器人协作/合作阻抗控制
  • 微服务保护
  • ICML 2024 顶级论文:机器学习有什么新进展?
  • 在Debian 7上安装Linux、Nginx、MySQL、PHP(LEMP)堆栈的方法
  • 4、Unity【基础】画线功能Linerenderer、物理系统Physics
  • 《Programming from the Ground Up》阅读笔记:p103-p116
  • 使用在AMD GPU上运行的ROCm进行大语言模型的自然语言处理任务
  • 数据分析:numpy 数组的基本使用
  • YOLOv8多种方法改进CBAM注意力机制有效提升检测精度(已跑通)
  • [Android studio]无法联网
  • Linux常用应急排查命令(持续更新)
  • ElasticSearch 的单点部署环境搭建
  • CSS学习笔记(01)flex布局
  • MFC之word操作
  • [数据集][目标检测]电力场景输电线均压环歪斜检测数据集VOC+YOLO格式303张2类别
  • 打手机检测算法源码样本展示打手机检测算法实际应用场景介绍
  • 人脸质量评价:深入解析和实现