AtCoder Beginner Contest 314

news2024/11/26 12:46:41

A.直接模拟就行

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+10;
#define int long long
int n,m;
string s="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679";

void solve(){
    cin>>n;
    n+=2;
    for(int i=0;i<n;i++)
    {
        cout<<s[i];
    }
}

signed main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
    //cin>>t;
    while(t--) solve();
}

B.直接模拟算次数排序

#include <bits/stdc++.h>
using namespace std;
const int N = 110;
#define int long long
typedef long long LL;
typedef pair<int, int> PII;
int n,m;
vector<int> a[N];
int cnt[N];
void solve()
{
    cin>>n;
    int mx=0;
    for(int i=1;i<=n;i++)
    {
        cin>>m;
        mx=max(mx,m);
        a[i].push_back(0);
        for(int j=1;j<=m;j++)
        {
            int x;
            cin>>x;
            a[i].push_back(x);
        }
    }
    
    int x;
    cin>>x;
 
    vector<PII> res;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<a[i].size();j++)
        {
            int m=a[i].size();
            if(a[i][j]==x)
            {
                cnt[j]++;
                res.push_back({m-1,i});
                break;
            }
        }
    }
    if(res.size()==0){
        cout<<0;
        return ;
    }
    sort(res.begin(),res.end());
    x=res[0].first;
    vector<int> b;
    for(int i=0;i<res.size();i++)
    if(x==res[i].first) b.push_back(res[i].second);
    sort(b.begin(),b.end());
    cout<<b.size()<<"\n";
    for(auto x:b) cout<<x<<" ";
}

signed main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
    //cin>>t;
    while(t--) solve();
}

C.把当前颜色集合掏出来  全部往右移动即可

#include <bits/stdc++.h>
using namespace std;
const int N = 5e5+10;
#define int long long
int n,m;
int a[N];
char b[N];
vector<char> res[N];

void solve(){
    cin>>n>>m;
    string s;
    cin>>s;
    s="?"+s;
    vector<int> cntt(N,0);
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        b[a[i]]=s[i];
        res[a[i]].push_back(s[i]);
    }
    
    for(int i=1;i<N;i++)
    {
        if(b[i])
        {
            res[i].pop_back();
            res[i].push_back(b[i]);
            reverse(res[i].begin(),res[i].end());
        }
    }
    
    for(int i=1;i<=n;i++)
    {
        if(!cntt[a[i]]){
            cout<<b[a[i]];
            cntt[a[i]]++;continue;
        }
        cout<<res[a[i]].back();
        res[a[i]].pop_back();
    }

}

signed main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
    //cin>>t;
    while(t--) solve();
}

D.

记录一下最后操作是大写还是小写还是没变化,然后顺便记录一下最后操作

因为大小写过后只是单纯改变字母,所以还要存一下后面的操作

#include <bits/stdc++.h>
using namespace std;
const int N = 5e5+10;
#define int long long
int n,m;

void solve(){
    string s;
    cin>>n>>s;
    s="?"+s;
    cin>>m;
    int now=-1;
    vector<pair<int,char>> a;
    for(int i=1;i<=m;i++)
    {
        int op,x;char y;
        cin>>op>>x>>y;
        if(op==1){
            s[x]=y;
            a.push_back({x,y});
        }
        else if(op==3)
        {
            now=3;
            a.clear();
        }
        else now=2,a.clear();
    }
    
    if(now==-1)
    {
        for(int i=1;i<=n;i++)
        cout<<s[i];
        return ;
    }
    else if(now==3)
    {
        for(int i=1;i<=n;i++)
        s[i]=(char)(toupper(s[i]));
        for(int i=0;i<a.size();i++){
            int x=a[i].first;char y=a[i].second;
            s[x]=y;
        }
    }
    else{
        for(int i=1;i<=n;i++)
        s[i]=(char)(tolower(s[i]));
        for(int i=0;i<a.size();i++){
            int x=a[i].first;char y=a[i].second;
            s[x]=y;
        }
    }
            for(int i=1;i<=n;i++)
        cout<<s[i];
}

signed main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
    //cin>>t;
    while(t--) solve();
}

E:首先期望dp

当前m分所需要花费的最小期望,每次枚举操作哪个数组

有个问题就是如果存在0,我一直递归同一个值会wa

所以把3/4*dp[i]=cj+1/4*f[i+4]+1/4*f[i+6]+1/4*f[i+8]

然后每个数乘4/3即可

#include<bits/stdc++.h>
using namespace std;
const int N = 110,mod=998244353;

typedef long long LL;
typedef pair<int, int> PII;

int n,m,k;
vector<int> a[N];

double c[N];


signed main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
  
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        cin>>c[i];
        int x;
        cin>>x;
        int zero=0;
        for(int j=1;j<=x;j++)
        {
            int p;cin>>p;
            if(p) a[i].push_back(p);
            else ++zero;
        }
        c[i]=1.0*c[i]*x/(x-zero);
    }
    vector<double> f(m+10,-1);
     function<double(int)> dfs=[&](int m)->double{
        if(m<=0) return 0;
        if(f[m]>=0) return f[m];  
        f[m]=1e18;
        for(int i=1;i<=n;i++)
        {
            double tmp=c[i];
            int sz=a[i].size();
            for(auto j:a[i])
            {
                tmp+=(j>=m?0:dfs(m-j))*(1.0/sz);
            }
            f[m]=min(f[m],tmp);
        }
        return f[m];
    };
    cout << fixed << setprecision(10) << dfs(m) << '\n';
}

F.

假设进行j场比赛,答案就是j场每场赢得概率相加

暴力就是每次合并一个集合,在这个集合全部数加上当前场赢得概率,复杂度n^2超时

但是最后会合并成一个集合,所以我们最后拓扑排序一下,把当前点的概率叠加在子节点的身上即可,子节点就是小于等于n

#include<bits/stdc++.h>
using namespace std;
const int N = 5e5+10,mod=998244353;
#define int long long
typedef long long LL;
typedef pair<int, int> PII;

int n,m,k;
int a[N],b[N];
int fact[N],infact[N];
vector<PII> g[N];
int qmi(int a,int k,int p){
    int res=1;
    while(k){
        if(k&1) res=(LL) res*a%p;
        a=(LL)a*a%p;
        k>>=1;
    }
    return res;
}
void init(){
    fact[0]=infact[0]=1;
    for(int i=1;i<N;i++){
        fact[i]=(LL)fact[i-1]*i%mod;
        infact[i]=(LL)infact[i-1]*qmi(i,mod-2,mod)%mod;
    }
}
int C(int a,int b){
    if(b<0||b>a) return 0;
    return ((LL)fact[a] * infact[b] % mod * infact[a - b] % mod);
}
class dsu {
  public:
    vector<int> p;
    vector<int> sz;
    int n;
 
    dsu(int _n) : n(_n) {
        p.resize(n);
        sz.resize(n);
        iota(p.begin(), p.end(), 0);
        fill(sz.begin(), sz.end(), 1);
    }
 
    inline int get(int x) { return (x == p[x] ? x : (p[x] = get(p[x]))); }
 
    inline bool unite(int x, int y) {
        x = get(x);
        y = get(y);
        if (x != y) {
            p[x] = y;
            sz[y] += sz[x];
            return true;
        }
        return false;
    }
};
signed main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    init();
    cin>>n;
    dsu d(2*n+10);
    int idx=n;
    for(int i=n+1;i<=n*2;i++)
    d.sz[i]=0;
    for(int i=1;i<n;i++)
    {
        int u,v;cin>>u>>v;
        ++idx;
        int fu=d.get(u),fv=d.get(v);
        int szu=d.sz[fu],szv=d.sz[fv];
        int zonhe=qmi(szu+szv,mod-2,mod);
        g[idx].emplace_back(fu,1ll*szu*zonhe%mod);
        g[idx].emplace_back(fv,1ll*szv*zonhe%mod);
        d.unite(u,idx);
        d.unite(v,idx);
    }
    vector<int> ans(n+10,1);
    function<void(int,int)> dfs=[&](int u,int p){
        if(u<=n)
        {
            ans[u]=p;
            return ;
        }  
        for(auto [v,w]:g[u]){
            dfs(v,(p+w)%mod);
        }
    };
    dfs(idx,0);
    for(int i=1;i<=n;i++)
     cout<<ans[i]<<" \n"[i==n];
    
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【电池-超级电容器混合存储系统】单机光伏电池-超级电容混合储能系统的能量管理系统(Simulink仿真)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Three.js 实现材质边缘通道发光效果

相关API的使用&#xff1a; 1. EffectComposer&#xff08;渲染后处理的通用框架&#xff0c;用于将多个渲染通道&#xff08;pass&#xff09;组合在一起创建特定的视觉效果&#xff09; 2. RenderPass(是用于渲染场景的通道。它将场景和相机作为输入&#xff0c;使用Three.…

MySQL数据库----------安装anaconda---------python与数据库的链接

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

【福建事业单位-数学运算】04计算、最值和几何

【福建事业单位-数学运算】04计算、最值和几何 一、计算1.1 基础计算1.2 数列计算等差数列等比数列 总结 二、最值问题2.1 最不利构造最不利加排列组合 2.2 构造数列 三、几何问题2.1 公式计算类规则图形非规则图形 2.2结论技巧性&#xff08;三角形&#xff09;总结 一、计算 …

【Zabbix安装-5.5版本】

Zabbix安装&#xff08;rpm包安装&#xff09; Index of /zabbix/zabbix/5.5/rhel/8/x86_64/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror rpm包链接&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.5/rhel/8/x86_64/zabbix-release-5.5-1.e…

日常BUG——通过命令行创建vue项目报错

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;日常BUG、BUG、问题分析☀️每日 一言 &#xff1a;存在错误说明你在进步&#xff01; 一、问题描述 在使用vue命令行创建一个vue项目时&#xff0c;出现一下的错误&#xff1a; vue create my…

无涯教程-Perl - ref函数

描述 如果EXPR为引用,则此函数返回真值&#xff1b;如果未提供EXPR,则为$_。返回的实际值还定义了引用所引用的实体的类型。 内置类型为- REFSCALARARRAYHASHCODEGLOBLVALUEIO::Handle 如果使用bless()函数为变量设置了祝福,则将返回新的数据类型。新的数据类型通常将是一个…

homebrew安装

1.国内镜像安装 /bin/zsh -c "$(curl -fsSL https://gitee.com/huwei1024/HomebrewCN/raw/master/Homebrew.sh)"2.选中科大下载源 3.输入密码 4.排错 5.常见错误网址 添加链接描述 6.配置环境变量

texmaker-Latex,设置biber/bibtex

打开texmaker&#xff0c;【选项】–>配置texmaker–>[命令]–>bib(la)tex&#xff0c;然后在该选项里面已有的路径下改为添加biber的路径

【数据结构】树和二叉树的概念及结构

1.树概念及结构 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&#…

【算法基础20-单调栈】

算法原理: 用单调递增栈&#xff0c;当该元素可以入栈的时候&#xff0c;栈顶元素就是它左侧第一个比它小的元素。 以&#xff1a;3 4 2 7 5 为例&#xff0c;过程如下&#xff1a; 动态模拟过程 题目&#xff1a; 给定一个长度为 N 的整数数列&#xff0c;输出每个数左边第一…

Vue.js 生命周期详解

Vue.js 是一款流行的 JavaScript 框架&#xff0c;它采用了组件化的开发方式&#xff0c;使得前端开发更加简单和高效。在 Vue.js 的开发过程中&#xff0c;了解和理解 Vue 的生命周期非常重要。本文将详细介绍 Vue 生命周期的四个阶段&#xff1a;创建、挂载、更新和销毁。 …

C语言快速回顾(一)

前言 在Android音视频开发中&#xff0c;网上知识点过于零碎&#xff0c;自学起来难度非常大&#xff0c;不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》&#xff0c;结合我自己的工作学习经历&#xff0c;我准备写一个音视频系列blog。C/C是音视频必…

vue3中使用component动态组件常见问题

一. 在vue3中使用动态组件问题警告处理 1. 代码如下 <template><div v-for"(item, index) in navItems" :key"index"><component :is"item.component" :key"item.gameId"></component></div> </te…

【Pytroch】基于支持向量机算法的数据分类预测(Excel可直接替换数据)

【Pytroch】基于支持向量机算法的数据分类预测&#xff08;Excel可直接替换数据&#xff09; 1.模型原理2.数学公式3.文件结构4.Excel数据5.下载地址6.完整代码7.运行结果 1.模型原理 支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;是一种强大的监…

【Megatron-DeepSpeed】张量并行工具代码mpu详解(四):张量并行版Embedding层及交叉熵的实现及测试

相关博客 【Megatron-DeepSpeed】张量并行工具代码mpu详解(四)&#xff1a;张量并行版Embedding层及交叉熵的实现及测试 【Megatron-DeepSpeed】张量并行工具代码mpu详解(三)&#xff1a;张量并行层的实现及测试 【Megatron-DeepSpeed】张量并行工具代码mpu详解(一)&#xff1a…

时序预测 | MATLAB实现基于CNN卷积神经网络的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于CNN卷积神经网络的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于CNN卷积神经网络的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 1.Matlab实现CNN卷积神经网络时间序列预测未…

webpack中常见的Loader

目录 1.webpack中的loader是什么&#xff1f;配置方式 2. loader特性3.常见的loader 1.webpack中的loader是什么&#xff1f; loader 用于对模块的"源代码"进行转换&#xff0c;在 import 或"加载"模块时预处理文件 webpack做的事情&#xff0c;仅仅是分…

Linux printf函数输出问题

1.printf函数并不会直接将数据输出到屏幕&#xff0c;而是先放到缓冲区中。 原因是&#xff1a; 解决效率和性能的问题。 比如说&#xff0c;printf在打印数据到屏幕上的时候不经过缓冲区&#xff0c;而是直接调用内核&#xff0c;此时内核就相当于另外一个进程&#xff0c;这…

Linux之【进程间通信(IPC)】-总结篇

Linux之【进程间通信&#xff08;IPC&#xff09;】-总结篇 管道System V共享内存System V消息队列System V信号量IPC资源的管理方式 往期文章 1.进程间通信之管道 2.进程间通信之System V共享内存 管道 进程之间具有独立性&#xff0c;拥有自己的虚拟地址空间&#xff0c;因…