AC修炼计划(AtCoder Regular Contest 162)

传送门:AtCoder Regular Contest 162 - AtCoder

A题签到

B - Insertion Sort 2

我们可以从头开始一个一个排序,把1通过操作放到第一个,把2通过操作放到第二个。。。以此类推。但会出现一种情况,如果我们所要排的数字在最后一位,该怎么办呢?那么我们需要把倒数第三位和倒数第四位的数字插到最后一位数字的后面,然后再按照上述的操作进行。当然,如果排到第n-1个数字时,n-1在最后一位,则无法进行操作,则数组不成立。

代码如下:

#pragma GCC optimize(3)  //O2优化开启
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
typedef pair<int,int> PII;
const int N=998244353;
const int MX=0x3f3f3f3f3f3f3f3f; 
int n,m;
int b[1000005];
int id[1000005];
void icealsoheat(){cin>>n;vector<PII>ans;for(int i=1;i<=n;i++){cin>>b[i];id[b[i]]=i;}for(int i=1;i<n;i++){if(b[i]==i)continue;if(id[i]==n&&i==n-1){cout<<"No";return;}if(id[i]==n){ans.push_back({n-2,n-2});int xx=b[n];b[n]=b[n-1];b[n-1]=b[n-2];b[n-2]=xx;id[b[n]]=n;id[b[n-1]]=n-1;id[b[n-2]]=n-2;}if(b[i]==i)continue;ans.push_back({id[i],i-1});int r=id[i]+1;int xx=b[r];for(int j=r;j>=i+2;j--){b[j]=b[j-2];id[b[j]]=j;}b[i]=i;b[i+1]=xx;       id[b[i]]=i;id[b[i+1]]=i+1;}cout<<"Yes\n";cout<<ans.size()<<"\n";for(auto [i,j]:ans){cout<<i<<" "<<j<<"\n";}}
signed main(){ios::sync_with_stdio(false);cin.tie();cout.tie();int _yq;_yq=1;// cin>>_yq;while(_yq--){icealsoheat();}
}

C - Mex Game on Tree

这道题其实很好判断,就是在一个子树中,要保证不存在含有k的子节点,其次还要有1到k-1的节点,才算成立。并且对于Bob来说,他会想进办法把k放入树中。所以,Alice必须在第一步就获得我们需要的值。那么我们不难想到,要么最开始就有符合要求的子树,要么就是差一个数就满足上述要求的子树(这种情况Alice第一步直接放入所需要的数就可以了)

代码如下:

#pragma GCC optimize(3)  //O2优化开启
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
typedef pair<int,int> PII;
const int N=998244353;
const int MX=0x3f3f3f3f3f3f3f3f; 
int n,k;
int a[1000005];
int p[1000005];
void icealsoheat(){cin>>n>>k;vector<vector<int>>ve(n+5);vector<vector<int>>dp(n+5,vector<int>(1005,0));vector<int>ge(n+5,0);for(int i=2;i<=n;i++){cin>>p[i];ve[p[i]].push_back(i);}for(int i=1;i<=n;i++)cin>>a[i];bool f=0;auto dfs=[&](auto self,int x)->void{if(a[x]>=0){dp[x][a[x]]=1;}ge[x]=1;for(auto i:ve[x]){self(self,i);for(int j=0;j<=n;j++){dp[x][j]+=dp[i][j];}ge[x]+=ge[i];}if(dp[x][k]==0){int an=0;int nn=0;for(int j=0;j<=n;j++){if(j<k){if(dp[x][j])an++;}nn+=dp[x][j];}if(an==k-1&&ge[x]-nn==1){f=1;}else if(an==k&&ge[x]-nn<=1){f=1;}}};dfs(dfs,1);if(f)puts("Alice");else puts("Bob");
}
signed main(){ios::sync_with_stdio(false);cin.tie();cout.tie();int _yq;_yq=1;cin>>_yq;while(_yq--){icealsoheat();}
}

D - Smallest Vertices

参考文献:ARC162 简要题解 - syzf2222 的博客 - 洛谷博客 (luogu.com.cn)

以及你别想再给我走了! (cnblogs.com)

从这题开始,发现自己开始力不从心了。好难好难。。。

首先,我们需要知道基本的prufer序列的一些知识:

一棵n个点的带标号生成树唯一对应一个长度为 n-2的Prufer 序列。

 Prufer 序列是这样构造的:每次选出编号最小的叶子节点(没有子节点的点),将它删去,并将它相连的点加入序列中,直到进行n−2 次后剩两个点。一个点prufer 序列中出现的次数为度数-1。每个数都可能在prufer 序列的每个位置出现。

第三个结论是解决本题的关键。

对于一个子树而言,如果该子树的根节点对答案有贡献,则该子树除根节点以外的节点的数字一定要大于根节点。

一个出度为drt的节点为根的生成树数量为:

设以x为根节点的集合S,|S|为该集合的数量,集合中不存在比x更小的节点。我们还要保证集合中出度的和为|S|-1,满足上述条件才能加上此贡献。我们可以用dp去维护,dp j k ,j表示我们选了多少个数,k表示这些数的出度的和。该节点的贡献为

最后节点1的要特殊单独计算。

代码如下:

#pragma GCC optimize(3)  //O2优化开启
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
typedef pair<int,int> PII;
const int mod=998244353;
const int MX=0x3f3f3f3f3f3f3f3f; 
int fac[1000];
int ifac[1000];
int kuai(int a,int b){int ans=1;while(b){if(b&1)ans=ans*a%mod;b>>=1;a=a*a%mod;}return  ans%mod;
}
inline ll C(ll n, ll m) {if (n < m || n < 0 || m < 0) {return 0;} else {return fac[n] * ifac[m] % mod * ifac[n - m] % mod;}
}
int n;
int d[1000];
void icealsoheat(){cin>>n;ifac[0]=fac[0]=1;for (int i = 1; i <= 505; ++i) {fac[i] = fac[i - 1] * i % mod;}ifac[505] = kuai(fac[505], mod - 2);for (int i = 505 - 1; ~i; --i) {ifac[i] = ifac[i + 1] * (i + 1) % mod;}int res=1;for(int i=1;i<=n;i++){cin>>d[i];// if(d[i]){//     res=res*d[i]%mod;// }res=res*ifac[d[i]]%mod;}vector dp(n+5,vector<int>(505,0));dp[0][0]=1;// res=kuai(res,mod-2);int ans=0;for(int i=n;i>=2;i--){if(d[i]){for(int j=d[i];j<=n-i;j++){int xx=dp[j][j-d[i]];xx=xx*d[i]%mod*d[1]%mod;xx=xx*fac[j-1]%mod*fac[n-j-2]%mod;xx=xx*res%mod;ans=(ans+xx)%mod;}}for(int j=n-i+1;j>=0;j--){for(int k=n;k>=0;k--){if(k>=d[i]&&j){dp[j][k]=(dp[j][k]+dp[j-1][k-d[i]])%mod;}}}if(!d[i]){int xx=fac[n-2]*d[1]%mod*res%mod;ans=(ans+xx)%mod;}}int xx=fac[n-2]*d[1]%mod;xx=xx*res%mod;ans+=xx;cout<<ans%mod;}
signed main(){ios::sync_with_stdio(false);cin.tie();cout.tie();int _yq;_yq=1;// cin>>_yq;while(_yq--){icealsoheat();}
}

E - Strange Constraints

好厉害的题,我完全想不到,也看题解了好长时间,感觉长脑子了,完全没想到竟然还可以这个样子。

 

参考文献:AT_arc162_e [ARC162E] Strange Constraints - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

代码如下:

#pragma GCC optimize(3)  //O2优化开启
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
typedef pair<int,int> PII;
const int mod=998244353;
const int MX=0x3f3f3f3f3f3f3f3f; int dp[505][505][505];
int fac[10005];
int ifac[10005];
int kuai(int a,int b){int ans=1;while(b){if(b&1)ans=ans*a%mod;b>>=1;a=a*a%mod;}return ans%mod;
}
int b[10005];
inline ll C(ll n, ll m) {if (n < m || n < 0 || m < 0) {return 0;} else {return fac[n] * ifac[m] % mod * ifac[n - m] % mod;}
}
int n;
void icealsoheat(){cin>>n;fac[0]=1;for (int i = 1; i <= n; ++i) {fac[i] = fac[i - 1] * i % mod;}ifac[n] = kuai(fac[n], mod - 2);for (int i = n - 1; i>=0; --i) {ifac[i] = ifac[i + 1] * (i + 1) % mod;}for(int i=1;i<=n;i++){int x;cin>>x;b[x]++;}b[n+1]=0;int ans=0;for(int i=n-1;i>=1;i--)b[i]+=b[i+1];dp[n+1][0][0]=1;for(int i=n;i>=1;i--){for(int j=0;j*(i+1)<=n&&j<=b[i+1];j++){for(int k=0;k<=b[i+1];k++){if(dp[i+1][j][k]==0)continue;int f=1;for(int x=0;j+x<=n&&k+x*i<=b[i];x++){dp[i][j+x][k+i*x]+=dp[i+1][j][k]*C(b[i]-j,x)%mod*fac[b[i]-k]%mod*f%mod*ifac[b[i]-k-i*x]%mod;dp[i][j+x][k+i*x]%=mod;f=f*ifac[i]%mod;}}}}for(int i=0;i<=b[1];i++){ans=(ans+dp[1][i][n])%mod;}cout<<ans;
}
signed main(){ios::sync_with_stdio(false);cin.tie();cout.tie();int _yq;_yq=1;// cin>>_yq;while(_yq--){icealsoheat();}
}

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

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

相关文章

Outlook邮件视图设置怎么修复

故障现象 Outlook邮箱显示不对 故障截图 故障原因 邮箱视图设置不对 解决方案 1、在Outlook上方工具栏找到视图按钮&#xff0c;以此选择视图→视图设置→列&#xff0c;打开选择的列 2、在视图→邮件预览里面&#xff0c;选择1行&#xff0c;在阅读格式选择靠右&#xff…

JZ22:链表中倒数第k个结点

JZ22&#xff1a;链表中倒数第k个结点 题目描述&#xff1a; 输入一个链表&#xff0c;输出该链表中倒数第k个结点。 示例1 输入&#xff1a; 1,{1,2,3,4,5} 返回值&#xff1a; {5} 分析&#xff1a; 快慢指针思想&#xff1a; 需要两个指针&#xff0c;快指针fast&…

贪吃蛇小游戏代码

框架区 package 结果;import java.awt.Color; import java.awt.EventQueue; import java.awt.Font; import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.util.ArrayList; import java.util.List; import java.util.Random;import javax.s…

解决Qt5.13.0无MySQL驱动问题

一、前言 由于Qt5.12.3是最后提供mysql数据库插件的版本&#xff0c;往后的版本需要自行编译对应的mysql数据库插件&#xff0c;官方安装包不再提供。使用高版本的Qt就需要自行编译mysql驱动。 若没有编译在QT中调用Qsqldatabase库连接mysql时&#xff0c;提示出现如下问题&a…

百度搜索智能化算力调控分配方法

作者 | 泰来 导读 随着近年深度学习技术的发展&#xff0c;搜索算法复杂度不断上升&#xff0c;算力供给需求出现了爆发式的增长。伴随着AI技术逐步走到深水区&#xff0c;算法红利在逐步消失&#xff0c;边际效应日益显著&#xff0c;算力效能的提升尤为重要&#xff0c;同时随…

俄罗斯方块小游戏

框架 package 框架;import java.awt.image.BufferedImage; import java.util.Objects;/*** author xiaoZhao* date 2022/5/7* describe* 小方块类* 方法&#xff1a; 左移、右移、下落*/ public class Cell {// 行private int row;// 列private int col;private BufferedIm…

一张图系列 - “position_embedding”

关于位置编码&#xff0c;我感觉应该我需要知道点啥&#xff1f; 0、需要知道什么知识&#xff1f; multi head atten 计算 复数的常识 1、embedding 是什么&#xff1f; position embedding常识、概念&#xff0c;没有会怎样&#xff1f; 交换token位置&#xff0c;没有P…

根据视频编码时间批量重命名视频文件

整理收藏的小视频的时候发现很多视频命名很随意&#xff0c;自己命名又太麻烦&#xff0c;看着乱糟糟的文件又心烦&#xff0c;所有写了这个程序&#xff0c;代码如下&#xff1a; import osfrom filetype import filetype from pymediainfo import MediaInfovideo_extension …

不敢信,30+岁的项目经理会是这样

大家好&#xff0c;我是老原。 你们知道&#xff0c;每个阶段的项目经理都是什么样的吗&#xff1f; 20多岁时&#xff0c;刚踏入项目管理的你可能是个什么都不懂的职场小白&#xff0c;或者只能在旁边打打下手&#xff1b; 到了30岁&#xff0c;经历了项目的人情冷暖&#…

@Version乐观锁配置mybatis-plus使用(version)

1&#xff1a;首先在实体类的属性注解上使用Version import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.Versio…

OpenCV必知必会基础3(包括色彩空间的变换、ROI、OpenCV中最重要的结构体Mat以及获取图像的属性)

文章目录 OpenCV的色彩空间——RGB与BGROpenCV的色彩空间——HSV与HSLHSV主要用于OpenCV中HSL OpenCV色彩空间转换YUV主要用于视频中题目 图像操作的基石Numpy【基础操作】np.arraynp.zerosnp.onesnp.fullnp.identitynp.eye Numpy基本操作之矩阵的检索与赋值Numpy基本操作三——…

051-第三代软件开发-日志容量时间限制

第三代软件开发-日志容量时间限制 文章目录 第三代软件开发-日志容量时间限制项目介绍日志容量时间限制 关键字&#xff1a; Qt、 Qml、 Time、 容量、 大小 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object Language…