(杭电多校)2023“钉耙编程”中国大学生算法设计超级联赛(10)

news/2024/7/7 21:52:43

1003 Many Topological Problems

每个节点序号和权值分开计算,两者的排列组合数相乘即为答案

对于序号的顺序,一共有n个位置,第一个位置可以放序号1,2,..n共n个点,第二个则可放置n-1个点,以此类推,排列组合数为n的阶乘

对于权值,从小到大放置,如果不考虑k的话,对于权值为x的数,可以接在权值为1,2...x-1的下面(x作为子节点),共x-1个数,然后再考虑k,对于权值为x的数,只能接在x-1,x-2,..x-k的下面,共k个数,所以权值为x的数的放置方式有min(x-1,k)种,由于权值是从2到n一个一个放置,分步计算,所以用乘法

数学知识,可以推公式 

 

发现当n等于k时,答案为n!*(k-1)!

当n不等于k时,当i-1等于k时为分界点,答案为n!*k!(共k个数)*k^(n-1-k)(共n-1-k个数)

注意,快速幂,a^k中的k必须为正数

法一: 

#include<iostream>
#include<algorithm>
#include<cstring>
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll;
const int N=1e6+10,mod=1e9+7;
ll fac[N];
int n,k;
//快速幂
int qmi(int a,int k){
    int res=1;
    while(k){
        if(k&1) res=(ll)res*a%mod;
        a=(ll)a*a%mod;
        k>>=1; 
    }
    return res;
}
void solve() {
    cin>>n>>k;
    if(k==n) cout<<fac[n]%mod*fac[k-1]%mod<<endl;
    else cout<<fac[n]%mod*fac[k]%mod*qmi(k,n-1-k)%mod<<endl;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    //预处理阶乘
    fac[0]=1;
    for(int i=1;i<=1e6;i++) fac[i]=fac[i-1]*i%mod;
    int t=1;
    cin>>t;
    while(t--) {
        solve();
    }
    return 0;
}

法二: 

#include<iostream>
#include<algorithm>
#include<cstring>
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll;
const int N=1e6+10,mod=1e9+7;
int n,k;
void solve() {
    cin>>n>>k;
    ll ans=1;
    for(int i=1;i<=n;i++) ans=ans*i%mod;
    for(int i=1;i<=n;i++){
        if(i>1) ans=ans*min(i-1,k)%mod;
    }
    cout<<ans<<endl;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t=1;
    cin>>t;
    while(t--) {
        solve();
    }
    return 0;
}

1004 Do You Like interactive Problems 

 算期望次数,就当作正常的次数,只不过分情况讨论,将不同概率和对应的次数相乘,然后全部相加(可以叠加,算出的低一层的期望次数仍可以和概率相乘并相加得到高一层的期望次数)

参考2023 hdu 第10场 1004 Do you Like Interactive Problem_TrRicky的博客-CSDN博客 

AC代码: 

#include<iostream>
#include<algorithm>
#include<cstring>
#include<ctime>
#include<set>
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll;
const int mod=998244353;
int n;
int qmi(int a,int k){
    int res=1;
    while(k){
        if(k&1) res=(ll)res*a%mod;
        a=(ll)a*a%mod;
        k>>=1;
    }
    return res;
}
int inv(int x){
    return qmi(x,mod-2);
}
void solve(){
    cin>>n;
    if(n==1) cout<<0<<endl;//当n为0时,直接特判,期望询问次数为0,因为只有一个数,这个数一定是x,都不需要询问
    else cout<<(ll)(2*n-1)*inv(3)%mod<<endl;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t=1;
    cin>>t;
    while(t--) {
        solve();
    }
    return 0;
}

1012 Equalize the Array

只要保证最小的那个数出现的次数是最大的就行,这样就可以一直累加变大

因为只有次数最大的那个数才可以被操作,而且只能是变大,所以必须从最小的数开始变大

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<set>
#include<map>
#define endl '\n'
//#define int long long
using namespace std;
typedef long long ll;
const int N=5e5+10;
int a[N];
int n;
void solve() {
    cin>>n;
    set<int>s;
    map<int,int>mp;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++){
        s.insert(a[i]);
        mp[a[i]]++;
    }
    int x=*s.begin();
    for(auto v:s){
        if(mp[x]<mp[v]){
            cout<<"NO"<<endl;
            return;
        }
    }
    cout<<"YES"<<endl;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int t=1;
    cin>>t;
    while(t--)
       solve();
    return 0;
}

http://lihuaxi.xjx100.cn/news/1465335.html

相关文章

【福建事业单位-综合基础知识】05民法典

这里写自定义目录标题 一、民法概述概念原则总结 二、自然人概念总结 三、民事法律行为总结 民法考察2-4题&#xff08;重点总则篇&#xff09; 一、民法概述 概念原则 总结 二、自然人 概念 总结 三、民事法律行为 总结

最新ChatGPT网站程序源码+AI系统+详细图文搭建教程/支持GPT4.0/AI绘画/H5端/Prompt知识库

一、前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01…

resource doesn‘t have a corresponding Go package.

resource doesnt have a corresponding Go package. GO这个鬼东西不能直接放src下。 ************ Building Go project: ProjectGoTest ************with GOPATH: D:\Go;D:\eclipse-jee-oxygen-2-win32-x86_64\workspace\ProjectGoTest >> Running: D:\Go\bin\go.exe …

苹果iOS17引入新功能:实时显示充电设施信息,续航焦虑不再

据外媒9to5mac报道&#xff0c;苹果公司计划在iOS 17中引入一项非常方便电动汽车车主的功能&#xff0c;即iPhone内置的地图应用将实时显示充电设施的可用性信息。在最新发布的iOS 17 Beta 1版本中&#xff0c;这一功能仍在开发阶段&#xff0c;尚缺少一些必要的数据。 据称&am…

js中的正则表达式(一)

目录 1.什么是正则表达式 2.正则表达式在JavaScript中的使用场景: 3.正则表达式的语法&#xff1a; 1.什么是正则表达式 正则表达式(Regular Expression&#xff09;是用于匹配字符串中字符组合的模式。在JavaScript中&#xff0c;正则表达式也是对象通常用来查找、替换那些符…

HTTP连接管理

基础知识&#xff1a;非持久连接 HTTP初始时1.0版本在浏览器每一次向服务器请求完资源都会立即断开TCP连接&#xff0c;如果想要请求多个资源&#xff0c;就必须建立多个连接&#xff0c;这就导致了服务端和客户端维护连接的开销。 例如&#xff1a;一个网页中包含文字资源也包…

记录首次面试2023-08-18

人生第一次面试&#xff0c;大概一个小时左右。没有问我C的&#xff0c;上来一个数据库事务&#xff0c;虽然没有复习&#xff0c;但是还是能够记住一些&#xff0c;主要问的一些事务的隔离级别&#xff0c;以及都有什么作用&#xff0c;我是举例回答的&#xff0c;客户端A和客…

AUTOSAR规范与ECU软件开发(实践篇)4.5在Simulink中导入软件组件描述文件——“自上而下”的工作流程

“自上而下”的工作流程有别于“自下而上”的工作流程,其需要先在AAT(AUTOSAR Authoring Tool)工具(如ISOLAR-A)中完成软件组 件框架设计,并将软件组件arxml描述文件导入Matlab/Simulink完成内部 算法的实现,然后再通过Matlab/Simulink生成符合AUTOSAR规范的代 码及arxm…