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

牛客周赛 Round 92-题解

牛客周赛 Round 92-题解

A-小红的签到题

code

#include<iostream>
#include<string>
using namespace std;
string s;
int main()
{int n;cin >> n;cout << "a_";for (int i = 0; i < n - 2; i ++)cout << 'b';return 0;
}

B-小红的模拟题

算法思路

dfs模板题

code

const int N = 1e3 + 10;
char g[N][N];
bool st[N][N];
char op[] = "DS";
bool flag;
string ans;
int n, m;
void dfs(int x, int y, string path)
{if (flag)return;if (x == n - 1 && y == m - 1){ans = path;flag = 1;return;}if (x >= n || y >= m)return;for (int i = 0; i < 2; i++){int a, b;char ch;if (i == 0){a = x;b = y + 1;ch = 'D';}else{a = x + 1;b = y;ch = 'S';}if (st[a][b])continue;if (g[a][b] == '#')continue;st[a][b] = 1;dfs(a, b, path + ch);st[a][b] = 0;}
}
void solve()
{cin >> n >> m;for (int i = 0; i < n; i++)cin >> g[i];dfs(0, 0, "");cout << ans;
}

C-小红的方神题

题目描述

小红希望构造一个长度为 n n n 的排列,使得对该排列连续进行 n − 1 n-1 n1 次“退化”操作后,最终只剩下一个数,且该数恰好等于 n − 2 n-2 n2

  • 退化操作:对于数组 a \,a a,其退化状态定义为取每对相邻元素之差的绝对值构成的新数组。
    例如,若 a = [ a 1 , a 2 , … , a k ] a=[a_1,a_2,\dots,a_k] a=[a1,a2,,ak],则退化后得到数组

    b = [ ∣ a 1 − a 2 ∣ , ∣ a 2 − a 3 ∣ , … , ∣ a k − 1 − a k ∣ ] , 长度为  k − 1. b=[\,|a_1-a_2|,\;|a_2-a_3|,\;\dots,\;|a_{k-1}-a_k|\,], \quad \text{长度为 }k-1. b=[a1a2,a2a3,,ak1ak],长度为 k1.

  • 排列定义:长度为 n n n 的排列是由 { 1 , 2 , … , n } \{1,2,\dots,n\} {1,2,,n} 按任意顺序组成的数组,每个数恰好出现一次。

如果存在满足条件的排列,输出任意一个;否则输出 − 1 -1 1


输入格式

n
  • 一行,一个整数 n n n 1 ≤ n ≤ 1 0 3 1 \le n \le 10^3 1n103),表示排列的长度。

输出格式

  • 如果不存在这样的排列,输出一行:

    -1
    
  • 否则输出一行 n n n 个用空格分隔的整数,表示所构造的排列。


算法思路

好家伙,又拿next_permutation 去暴力了,喜提超时

那么回过头思考一下,看看样例为什么是1 3 2呢

那么我假设一下 1 , n , n − 1 , n − 2 , n − 3... 1,n , n - 1, n - 2, n- 3... 1,n,n1,n2,n3... 那么做减法

第一次: n − 1 , 1 , 1 , . . . n - 1, 1, 1, ... n1,1,1,...

第二次: n − 2 , 0 , 0 , 0 , . . . n-2, 0, 0, 0, ... n2,0,0,0,...

好家伙这不就直接出来了吗,

code

#include <bits/stdc++.h>
using namespace std;int main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n;cin >> n;if (n < 3) {cout << -1 << "\n";return 0;}cout << 1;for (int x = n; x >= 2; --x) {cout << " " << x;}cout << "\n";return 0;
}

D-小红的数学题

题目描述

小红拿到了一个正整数 k k k,她希望你找到两个正整数 p , q p, q p,q 满足

p + q = k p + q = k p+q=k

且二次方程

x 2 − p x + q = 0 x^2 - p\,x + q = 0 x2px+q=0

存在两个正整数根。如果不存在这样的 p , q p, q p,q,请输出 − 1 -1 1


输入描述

一个正整数

k ( 1 ≤ k ≤ 1 0 12 ) k\;(1 \le k \le 10^{12}) k(1k1012)


输出描述

  • 如果不存在满足条件的正整数 p , q p, q p,q,输出一行:

    -1
    
  • 否则,输出一行两个正整数 p p p q q q,以空格分隔,代表你找到的任意一组解:

    p q
    

算法思路

首先要想到韦达定理

e8e7c03ccc41628ad7a7bb2c38bf191e

那么只需要枚举 k+1的两个大于1的整数因数就可以了

code

void solve()
{i64 k, p, q;cin >> k;k = k + 1;for (i64 i = 1; i * i <= k + 1; i++){if (k % i == 0){i64 a, b;a = i;b = k / i;if (a >= 2 && b >= 2){i64 p = a - 1 + b - 1, q = (a - 1) * (b - 1);cout << p << " " << q;return;}}}cout << -1;
}k / i;if (a >= 2 && b >= 2){i64 p = a - 1 + b - 1, q = (a - 1) * (b - 1);cout << p << " " << q;return;}}}cout << -1;
}
http://www.xdnf.cn/news/397747.html

相关文章:

  • Java并发编程实战
  • 简单的强化学习举例
  • 笔试阶段性心得总结
  • 模块化编程
  • ACM模式手动构建二叉树
  • 算法导论第9章思考题
  • 深入理解深度循环神经网络(Deep RNN)
  • Beta分布--贝叶斯建模概率或比例常用分布
  • eNsp的使用
  • 数据结构【二叉树的遍历实现】
  • 免费公共DNS服务器推荐
  • 如何读论文【论文精读】
  • opencascade.js stp vite webpack 调试笔记
  • C++ STL编程 vector空间预留、vector高效删除、vector数据排序、vector代码练习
  • 风扇接口
  • 自制PowerPoint荧光笔插件指南
  • 集合(超详细)
  • 【人工智能】DeepSeek的崛起-下一代AI模型的秘密武器
  • 微调自qwen3的无审查大模型(需谨慎使用):Josiefied-Qwen3-8B-abliterated-v1
  • LeetCode 热题 100 101. 对称二叉树
  • 单链表C语言实现(付代码全)
  • 进程检测与控制
  • C++学习之STL学习
  • 联合类型的逻辑或关系与类型保护
  • 关于我在实现用户头像更换时遇到的图片上传和保存的问题
  • Colab使用_文件操作
  • C++.IP协议通信
  • 【C++进阶】第3课—二叉搜索树
  • C++猴子摘桃 2024年信息素养大赛复赛 C++小学/初中组 算法创意实践挑战赛 真题详细解析
  • [超详细,推荐!!!]前端性能优化策略详解