【牛客训练记录】华为杯2024年广东工业大学新生赛(同步赛)

news/2024/12/1 18:34:16/文章来源:https://www.cnblogs.com/longxingx/p/18580097

训练情况

赛后反思

组合数学还得加练,J题奇妙的乘法逆元预处理,开个unordered_map记忆化就过了?!,E题太头铁了,异或不算就直接交,F题又是急到没取模就直接交。

A题

字符串 Tomori 后面补上 Haruhikage

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'using namespace std;void solve(){string s; cin>>s;cout<<s<<endl;if(s == "Tomori") cout<<"Haruhikage"<<endl;
}signed main(){int T; cin>>T; while(T--)solve();return 0;
}

N题

找票数最多的人的名字

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'using namespace std;string ans;
int now;void solve(){string s; cin>>s;int x; cin>>x;if(x > now){now = x;ans = s;}
}signed main(){int T; cin>>T; while(T--)solve();cout<<ans<<endl;return 0;
}

F题

由于这题保证字符串之间互不相同,所以它下面给的字符串并没有什么用,所以只需要 \(n\) 就可以计算答案,对于某一种缩写,对答案的贡献就是它的全排列,就是从 \(n\) 个字符串里面选 \(1,2,3,4,\cdots,n\) 的全排列,所以这题的答案是 \(A_n^1 + A_n^2 + A_n^3 \cdots A_n^n\)

#include <bits/stdc++.h>
#define int long long
#define endl '\n'using namespace std;const int mod = 1e9 + 7;void solve(){int n; cin>>n;int ans = 0;int now = 1;for(int i = n;i;i--){now *= i;now %= mod;ans += now;ans %= mod;}cout<<ans<<endl;
}signed main(){// int T; cin>>T; while(T--)solve();return 0;
}

I题

\(i\) 可以跳到 \(a_i\),对于两个不互通的环,我们需要交换两个环上的任意元素即可打通,所以最后需要交换的次数就是不同环的个数-1,所以我们直接并查集(DSU)维护,最后求有多少个不同的环,答案再减一。

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'using namespace std;const int N = 1e5 + 3;int fa[N];int Find(int x){if(fa[x] == x) return x;return fa[x] = Find(fa[x]);
}void Union(int x,int y){x = Find(x); y = Find(y);if(x == y) return;fa[y] = x;
}void solve(){int n; cin>>n;vector<int> a(n + 1);for(int i = 1;i<=n;i++) fa[i] = i,cin>>a[i];for(int i = 1;i<=n;i++){Union(i,a[i]);}vector<bool> vis(n + 1);int ans = 0;for(int i = 1;i<=n;i++){if(!vis[Find(i)]){vis[Find(i)] = 1;ans++;}}cout<<ans-1<<endl;
}signed main(){int T; cin>>T; while(T--)solve();return 0;
}

E题

我们观察发现每一行每一列上的元素都互不相同才能让异或最小

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'using namespace std;const int N = 507;int n;
int a[N][N];void solve(){cin>>n;for(int i = 0;i<n;i++){for(int j = 0;j<n;j++){a[i][j] = (i+j)%n;}}int ans = 0;for(int i = 0;i<n;i++) ans^=(i+1);cout<<ans<<endl;for(int i = 0;i<n;i++){for(int j = 0;j<n;j++){cout<<a[i][j]+1<<" ";}cout<<endl;}
}signed main(){// int T; cin>>T; while(T--)solve();return 0;
}

J题

\(n\) 次,输 \(n-1\) 次,输的位置可以在任意位置,有 \(C_{n+k-1}^k\) 种,由于是独立事件,概率就是每个事件概率的乘积,所以答案就是

\[\sum_{i=0}^{n-1}p^n \times (1-p)^i \times C_{n+k-1}^k \]

#include <bits/stdc++.h>
#define int long long
#define endl '\n'using namespace std;const int mod = 1e9 + 7;
const int N = 2e5 + 3;int jc[N];inline int read(){int s = 0; char c = getchar();while(!isdigit(c)) c = getchar();while(isdigit(c)){s = (s << 1) + (s << 3) + (c ^ 48);c = getchar();}return s;
}void print(int x){if(x > 9) print(x/10);putchar(x%10+48);
}int ksm(int a,int b){int x = a;int y = b;int ans = 1;while(y){if(y&1){ans *= x;ans %= mod;}x*=x;x%=mod;y>>=1;}return ans;
}unordered_map<int,int> pinv;int inv(int x){if(pinv[x]) return pinv[x];return pinv[x] = ksm(x,mod-2);
}void pre(){jc[0] = 1;for(int i = 1;i<=N-3;i++) jc[i] = jc[i-1]*i,jc[i] %= mod;
}int C(int n,int m){return (((jc[n]*inv(jc[n-m])) % mod)*inv(jc[m])) % mod;
}void solve(){int n,p,q; n = read(); p = read(); q = read();int win = (p*inv(q)) % mod;int lose = ((q-p)*inv(q)) % mod;int powwin = ksm(win,n);int powlose = 1;int ans = 0;for(int k = 0;k<=n-1;k++){ans += (((powwin*powlose) % mod)*C(n+k-1,k)) % mod;powlose *= lose; powlose%=mod;ans %= mod;}print(ans); puts("");
}signed main(){pre();int T; T = read(); while(T--)solve();return 0;
} 

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

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

相关文章

攻防世界-baigeiRSA

一、题目 给了如下两个文件二、解题 1、查看代码发现就是简单的RSA加密算法,仔细分析一下发现flag就是明文,而要获得flag就要解密密文,但是代码中只提供了e。于是又去out文件翻了一下,常使用记事本打开,发现n和c已经给出,由于n的位数只有78个字符,可以尝试暴力分解因数2…

【TIA Portal V19软件下载与安装教程】

1、安装包 「TIA Portal V19(64bit).rar」 链接:https://pan.quark.cn/s/388931745834 提取码:VqMr 2、安装教程(建议关闭杀毒软件和系统防护) 1) 下载并解压安装包,右击执行NoRestart.bat文件2) 弹窗后,按任意键退出3) 安装Portal V19,管理员方式运…

《智能汽车传感器:原理设计应用》新书推荐

《智能汽车传感器:原理设计应用》新书推荐 由化学工业出版社资深编辑张海丽老师负责策划编辑。本书在京东、淘宝天猫、当当网上均有销售京东:https://search.jd.com/Search?keyword=%E6%99%BA%E8%83%BD%E6%B1%BD%E8%BD%A6%E4%BC%A0%E6%84%9F%E5%99%A8%EF%BC%9A%E5%8E%9F%E7%…

38. html_02

1. 标签的id属性和class属性 id 用于精确查找某个标签。 类似于标签的唯一标识符,用于在同一个页面上唯一标识一个特定的元素。每个id值在整个文档中都必须是唯一的,不能重复使用。通过id值,可以在JavaScript或CSS中引用特定标签,并对其进行操作或样式化。 class 类似于面向…

高级语言程序设计课程第九次个人作业(102400106刘鑫语)

这个作业属于哪个课程:https://edu.cnblogs.com/campus/fzu/2024C/ 这个作业要求在哪里: https://edu.cnblogs.com/campus/fzu/2024C/homework/13311 学号:102300106 姓名:刘鑫语 14.17.3;14.17.4 结构模板和数组,没有什么问题 14.17.5一开始定义days函数中试图访问month…

分布式训练

模型并行与数据并行 Parameter Server 同步更新: 在 work 比较多的情况下,parameter server 承受的压力会比较大,网络开销也大 异步更新: 1参数和更新用的梯度并不来自同一个迭代。用来更新的梯度可能是几步更新前的参数算出来的。 2参数的读取并没有加锁。这导致 worker 可…

宝塔安装thinkphp低版本路径不对

如果你在宝塔面板上安装了ThinkPHP低版本(例如ThinkPHP 5.0或更早版本),但遇到了路径问题,可以按照以下步骤进行排查和解决: 1. 检查网站根目录设置 确保你的网站根目录设置正确。通常,ThinkPHP项目的入口文件是 public 目录下的 index.php 文件。登录宝塔面板。 进入“网…

C#基础之集合讲解

目录1 集合1.1 数组1.1.1 简介1.1.2 声明使用1.1.2.1 声明 & 初始化1.1.2.2 赋值给数组1.1.2.3 访问数组元素1.1.3 多维数组1.1.3.1 声明1.1.3.2 初始化二维数组1.1.3.3 访问二维数组元素1.1.4 交错数组1.1.5 传递数组给函数1.1.6 Array1.1.6.1 简介1.1.6.2 属性1.1.6.3 方…

织梦网站关键词修改,如何优化DedeCMS的关键词设置

修改织梦网站(DedeCMS)的关键词设置可以通过以下步骤实现:登录管理后台:使用管理员账号登录DedeCMS管理后台。 进入SEO设置:导航至“系统” > “系统基本参数” > “SEO设置”。 修改关键词:在“关键词”字段中,输入新的关键词。 保存更改:确认无误后,保存修改。…

C#基础之不安全代码讲解

目录1 不安全代码1.1 简介1.2 指针变量1.3 编译不安全代码1.4 使用示例1.4.1 简单使用1.4.2 使用指针检索数据值1.4.3 传递指针作为方法的参数1.4.4 使用指针访问数组元素1.5 fixed1.5.1 为什么需要 fixed1.5.2 为什么 int *p 和 int[] p 是不同的类型1.5.3 示例1.6 stackalloc…

IDA+WSL2实现本地linux动态调试

1、首先在ida安装目录找到dbgsrv这个文件夹,打开后把“linux_server”这个文件拖到你的linux中(我放在/root位置)2、然后赋予两个文件权限(linux-server和要调试的文件) chmod +x /root/linux_server chmod +x 你的待调试文件位置然后运行调试组件 /root/linux_server64参…