首页 > 其他分享 >【牛客训练记录】"华为杯"2024年广东工业大学新生赛(同步赛)

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

时间:2024-12-01 18:44:19浏览次数:8  
标签:return int long 2024 牛客 华为 solve ans define

训练情况

赛后反思

组合数学还得加练,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;
} 

标签:return,int,long,2024,牛客,华为,solve,ans,define
From: https://www.cnblogs.com/longxingx/p/18580097

相关文章

  • 2024-2025-1 20241308 《计算机基础与程序设计》第十周学习总结
    班级链接https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP作业要求https://www.cnblogs.com/rocedu/p/9577842.html#WEEK10作业目标信息系统数据库与SQL人工智能与专家系统人工神经网络模拟与离散事件排队系统天气与地震模型图形图像教材学习内容......
  • (2024最新毕设合集)基于python的医疗用品管理平台-35382|可做计算机毕业设计JAVA、PHP、
    摘要本论文主要论述了如何基于Python开发一个医疗用品管理平台,本系统将严格按照软件开发流程进行各个阶段的工作,面向对象编程思想进行项目开发。在引言中,作者将论述医疗用品管理平台的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析设计。......
  • NOIP2024游记
    11.27Day-2发烧了。\(38.5\)。11.28Day-1上午请假卷whk,反正没看一点。11.29Day0和往常一样颓废的一天。11.30Day1\(6:15\)起床,随后去杭州,\(8:00\)左右到。402机房,和CSP-S一个。\(8:30\)开赛。看T1。wc,瞪了\(10\)分钟,居然不会。。此时,我选择开T2。......
  • 2024-2025-1 20241413 《计算机基础与程序设计》第十周学习总结
    班级链接https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP作业要求https://www.cnblogs.com/rocedu/p/9577842.html#WEEK10作业目标信息系统数据库与SQL人工智能与专家系统人工神经网络模拟与离散事件排队系统天气与地震模型图形图像教材学习内容......
  • 20222317 2024-2025-1 《网络与系统攻防技术》实验七实验报告
    1.实验内容本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有(1)简单应用SET工具建立冒名网站(2)ettercapDNSspoof(3)结合应用两种技术,用DNSspoof引导特定访问到冒名网站。2.实验过程2.1简单应用SET工具建立冒名网站2.1.1开启并配置Apac......
  • NOIP2024游记
    Day-1同学掏出了珍藏的游戏(指神秘scratch小游戏),或许是最后的狂欢。去年的今日似乎已经考完了呢……当时的心态真好啊,有点羡慕。现在的我似乎只是夹杂在阴暗b和现充之间的路边一条、的说。恭谨而牵扯地迎接吧,终幕或者楔子,命运的既定就在前方了。拉线,祝自己rp++,早上能睡醒Da......
  • NOIP2024总结
    超长延迟vp。没有一点思维能力,成功被T1创飞。实际上赛时T2是想出来了,但真被T1给干红温了。实际上T4链的分是没调出来的。实际上稳定着打应该有[60,80]+100+0+64=[224,244],但显然没有。赛时把T2题看错了,活该。可能这种ARC状物真的得多训一下,而且一定要稳定自己的心态。可能......
  • P11361 [NOIP2024] 编辑字符串
    题目大意详细题目传送门两个\(01\)串,可以对两个串中任意相邻的字符进行交换,没有代价可以进行任意多次。可是两个串有的位置的字符是定死的,无法被交换,求任意次操作后最多让两个串的多少个位置\(01\)相等。即\(\sum[a_i=b_i]\)。\(n\leq10^5\)思路首先根据冒泡排序的性......
  • [2024NOIP 躺平记] 彻底反思 CSP2024
    在此向退役的WEAK101高二学长致敬。CSP2024游记昨天考完了NOIP(虽然我没考),今天来机房再次沉浸在CSPT2简单小贪心没做出来的悲痛中。那么我们需要思考几个问题:为什么T2的贪心没有想出来为什么T2没想出来会导致总分只有160pts为什么这么久了仍旧沉浸在过去而不......
  • 洛谷P11361 [NOIP2024] 编辑字符串
    ProblemSolve首先任意更换相邻元素任意次等同于在可交换范围内随便移动这题是求最优解,直观想到DP和贪心,但是容易反应过来本题DP的话很难做到无后效性,且状态较多,故尝试贪心不难发现,我们从左往右遍历的某个时刻进行交换后所得到的局部最优解总是答案的一种方案的一部分原因......