AtCoder Beginner Contest 314

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.hqwc.cn/news/66038.html

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

相关文章

10-1_Qt 5.9 C++开发指南_Data Visualization实现数据三维显示

Data Visualization 是 Qt 提供的用于数据三维显示的模块。在 Qt 5.7 以前只有商业版才有此模块&#xff0c;而从Qt5.7 开始此模块在社区版本里也可以免费使用了。Data Visualization 用于数据的三维显示&#xff0c;包括三维柱状图、三维空间散点、三维曲面等。Data Visualiza…

Idea报错:Cannot resolve symbol “springframework“以及各种依赖包

问题描述&#xff1a; Idea导入了maven项目之后出现报错Cannot resolve symbol “springframework” &#xff0c;识别不了这个标识或者找不到这个包&#xff0c;明明这些依赖和包都有就是出现报错&#xff0c;并且运行按钮变成灰色 解决办法&#xff1a; 其实这个原因大概率就…

SQL SERVER 异地备份到远程共享文件夹异常处理

SQL SERVER 异地备份到远程共享文件夹异常处理 SQL Server 异地备份到远程共享文件夹异常处理 - 灰信网&#xff08;软件开发博客聚合&#xff09; -- 允许配置高级选项 EXEC sp_configure show advanced options, 1 GO -- 重新配置 RECONFIGURE GO -- 启用xp_cmdshell EXEC sp…

【算法基础20-单调栈】

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

Design-Pattern设计模式

Design-Pattern设计模式 图说设计模式 图说设计模式 在线书籍 软件模式是将模式的一般概念应用于软件开发领域&#xff0c;即软件开发的 总体指导思路或参照样板。软件模式并非仅限于设计模式&#xff0c;还包括 架构模式、分析模式和过程模式等&#xff0c;实际上&#xff…

【JVM】JVM中的分代回收

文章目录 分代收集算法什么是分代分代收集算法-工作机制MinorGC、 Mixed GC 、 FullGC的区别是什么 分代收集算法 什么是分代 在java8时&#xff0c;堆被分为了两份&#xff1a; 新生代和老年代【1&#xff1a;2】 其中&#xff1a; 对于新生代&#xff0c;内部又被分为了三…

leetcode 力扣刷题 滑动窗口 部分题解(记录)

力扣刷题 滑动窗口相关的部分题解 209. 长度最小的子数组904. 水果成篮76. 最小覆盖子串 209. 长度最小的子数组 leetcode题目链接 209.长度最小的子数组 题目内容是这样的&#xff1a;给定一个含有 n个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的…

Dynamic CRM开发 - 实体介绍

实体简介 在CRM中,实体(Entity)是数据的基本载体,也是构建业务逻辑网络的基础节点。 实体可以理解为数据库中的一张表(实体中的字段对应数据库表的字段),比如创建一个实体存储客户信息,创建一个实体存储产品信息,产品实体里可以创建一个查找类型的字段(类似表的外键)…

sql中union all、union、intersect、minus的区别图解,测试

相关文章 sql 的 join、left join、full join的区别图解总结&#xff0c;测试&#xff0c;注意事项 1. 结论示意图 对于intersect、minus&#xff0c;oracle支持&#xff0c;mysql不支持&#xff0c;可以变通&#xff08;in或exists&#xff09;实现 2.测试 2.1.创建表和数…

Oracle将与Kubernetes合作推出DevOps解决方案!

导读Oracle想成为云计算领域的巨头&#xff0c;但它不是推出自己品牌的云DevOps软件&#xff0c;而是将与CoreOS在Kubernetes端展开合作。七年前&#xff0c;Oracle想要成为Linux领域的一家重量级公司。于是&#xff0c;Oracle主席拉里埃利森&#xff08;Larry Ellison&#xf…

数据结构:选择排序

简单选择排序 选择排序是一种简单直观的排序算法。首先在未排序序列中找到最大&#xff08;最小&#xff09;的元素&#xff0c;存放到排序学列的其实位置&#xff0c;然后在剩余的未排序的元素中寻找最小&#xff08;最大&#xff09;元素&#xff0c;存放在已排序序列的后面…

福利!百度Workshop实战课,即刻搭建AI原生应用!| IDCF

你是否希望掌握大模型开发的秘诀&#xff1f;你是否渴望得到实践操作的机会&#xff1f;如果你的心中充满热情和期待&#xff0c;那么&#xff0c;WAVE SUMMIT 2023特别设置的Workshop将会是你的知识启航站&#xff01; 本次Workshop专注于AI开发与大模型应用&#xff0c;邀请…