比赛链接
https://ac.nowcoder.com/acm/contest/13926

F.Group Project

首先肯定可以划分成两个班级的,且班级内不会有冲突。那么肯定优先选择班级内配对,最后如果每个班都剩一个,且此时 cnta*cntb!=m,那么这两个人能配对,答案+1(cnta,cntb代表每个班级的人数,如果相乘不等于m,那么肯定存在当前班级的一个人可以和另一个班级的一个人配对)。然后用并查集实现即可。
这里把for循环换成while(m–)就过不了,

# include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,m;
int fa[N];
int enemy[N];
int find_fa(int x)
{if(x==fa[x])return x;elsereturn fa[x]=find_fa(fa[x]);
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;++i)fa[i]=i;for(int i=1;i<=m;++i){int x,y;scanf("%d%d",&x,&y);if(enemy[x]){if(find_fa(enemy[x])!=find_fa(y))fa[fa[y]]=fa[enemy[x]];}elseenemy[x]=y;if(enemy[y]){if(find_fa(enemy[y])!=find_fa(x))fa[fa[x]]=fa[enemy[y]];}elseenemy[y]=x;}int root=find_fa(1);int cnta=0;int cntb=0;for(int i=1;i<=n;++i){if(fa[i]==root)cnta++;elsecntb++;}if(cnta%2==1&&cntb%2==1&&cnta*cntb!=m)printf("%d\n",cnta/2+cntb/2+1);elseprintf("%d\n",cnta/2+cntb/2);
}

G.Human Pyramid

思维+dp。strong的要不站在最底下,要不下面要有两个strong支撑。

我们换个方向看(按斜线方向看),strong要不是连续的,要不就是单独在最下面。所以我们可以按斜线方向进行dp。dp[i][j][k]表示第i行至少有连续
k个strong,且前i行有j个strong的方案数。(这里的行数是看斜线方向)
状态转移方程如下:
dp[i][j][k]=dp[i-1][j-k][max(0,k-1)]+dp[i][j][k+1]
解释如下:
如果 i 行用k个strong,那么可由前一行 i-1行 转移到,那么前 i-1 行肯定是用 j-k个strong且第 i 行至少用 k-1个strong。(当然k=0时,前面也得至少用0个,所以和0取个max)
如果 i 行用大于 k 个strong,那么可由至少用 k+1 个strong转移到

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mod=1e9+7;
ll dp[105][5305][105]; //dp[i][j][k]表示第i行至少选k个strong,且一共选j个strong的方案数
int main()
{int h,s;cin>>h>>s;dp[0][0][0]=1;for(int i=1;i<=h;++i)for(int j=0;j<=s;++j)for(int k=min(i,j);k>=0;k--)dp[i][j][k]=(dp[i][j][k+1]+dp[i-1][j-k][max(0,k-1)])%mod;cout<<dp[h][s][0]<<endl;return 0;
}

H.In-place Sorting

贪心的想法,如果当前第i个数ai已经大于等于前面的了,要让他尽可能小,这样后面才能更容易满足条件。每次先把6全部改成9,看此时是否大于等于前面,如果不满足输出impossible,否则从高位向后依次,把9改为6,看是否满足,如果不满足改回9,如果满足继续向后重复此操作。因为如果当前能把9改为6,那么之后肯定不会出现情况,让前面的6重新改回9。

#include <bits/stdc++.h>
using namespace std;
const int N=1e4+5;
int n;
string a[N];
int main()
{cin>>n;for(int i=1;i<=n;++i)cin>>a[i];for(int i=0;a[1][i];++i){if(a[1][i]=='9')a[1][i]='6';}for(int i=2;i<=n;++i){if(a[i].size()<a[i-1].size()){puts("impossible");return 0;}if(a[i].size()>a[i-1].size()){for(int j=0;a[i][j];++j)if(a[i][j]=='9')a[i][j]='6';continue;}for(int j=0;a[i][j];++j)if(a[i][j]=='6')a[i][j]='9';if(a[i]<a[i-1]){puts("impossible");return 0;}for(int j=0;a[i][j];++j){if(a[i][j]=='9')a[i][j]='6';if(a[i]>=a[i-1])continue;a[i][j]='9';}}puts("possible");for(int i=1;i<=n;++i)cout<<a[i]<<endl;return 0;
}

I.Jam-packed

很简单的二分,首先想到最小数量具有单调性(因为如果当前情况满足的话,比当前情况小的肯定也满足check条件),因为箱子是无限个,所以最小数量多小都可以,所以 l=1,而最大数量也不可能超过上限 r=k。然后对于每个mid, 判断是否满足条件(先按每箱放mid个,那么最后会剩n%mid个,所以要将最后的n%mid个放到前面n/mid个箱子上,即判断 n%mid是否小于等于 (k-mid)*(n/mid),如果满足就可以,不满足就不可以)PS:或者直接公式 n/(n/k + 1)

#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
inline __int128 read(){__int128 x = 0, f = 1;char ch = getchar();while(ch < '0' || ch > '9'){if(ch == '-')f = -1;ch = getchar();}while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();}return x * f;
}
inline void print(__int128 x){if(x < 0){putchar('-');x = -x;}if(x > 9)print(x / 10);putchar(x % 10 + '0');
}
__int128 n,k;
bool check(__int128 x)
{if(n%x==0)return 1;__int128 res=n%x;__int128 num=n/x;return res<=num*(k-x);
}
int main()
{n=read();k=read();__int128 l=1;__int128 r=k;__int128 mid;__int128 ans=0;while(l<=r){mid=(l+r)>>1;if(check(mid)){ans=max(ans,mid);l=mid+1;}elser=mid-1;}print(ans);
}

2021年度训练联盟热身训练赛第五场 F,G,H,I相关推荐

  1. 2021年度训练联盟热身训练赛第四场 H - Rock Paper Scissors(字符串匹配,FFT)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 2021年度训练联盟热身训练赛第四场 H - Rock Paper Scissors(字符串匹配,FF ...

  2. 2021年度训练联盟热身训练赛第五场

    2021年度训练联盟热身训练赛第五场 链接:https://ac.nowcoder.com/acm/contest/13926 A Binary Seating #include<bits/st ...

  3. 2021年度训练联盟热身训练赛第八场

    目录 2021年度训练联盟热身训练赛第八场 A-Fire on Field 题意 思路 代码 B-Gene Tree 题意 思路 代码 I-Thread Knots 题意 思路 代码 J-Triang ...

  4. 2021年度训练联盟热身训练赛第三场赛后补题

    2021年度训练联盟热身训练赛第三场赛后补题 A Circuit Math [题目分析] [代码展示] B Diagonal Cut [题目分析] [代码展示] C Gerrymandering [题 ...

  5. 2021年度训练联盟热身训练赛第三场(待补)

    文章目录 前言 一.Circuit Math(后缀表达式---栈&&fgets) 二.Diagonal Cut(gcd最大公因数,数论) 三.expected primary-expr ...

  6. 2021年度训练联盟热身训练赛第二场(全)

    传送门 怎么说呢,这次的训练赛的题目难度不是很大,但就是字多 A Binarize It Professor Boolando can only think in binary, or more sp ...

  7. 【2021年度训练联盟热身训练赛第五场】Jam-packed

    import math as ma if __name__=="__main__":n,m = map(int,input().split())if n < m:

  8. 【2021年度训练联盟热身训练赛第四场】Game Map(python C++)

    #include <bits/stdc++.h> #include <vector> #define ll long long using namespace std; int ...

  9. 【2021年度训练联盟热身训练赛第四场】Happy Number(python)

    import math import cmath import sys import string import heapq import bisect import copy from queue ...

最新文章

  1. std::make_unique<T>和std::make_shared<T>
  2. java基础排序_Java排序算法-Java入门|Java基础课程
  3. 【Python】二维数据格式化
  4. ffmpeg转换格式
  5. 出现ping: unknown host www.baidu.com 问题解决
  6. linux用户态使用gpio中断方法
  7. pageoffice 骑缝章_Java 集成PageOffice自带印章配置连接MySQL
  8. Dotfuscator Professional Edition 4.1
  9. Python装饰器、metaclass、abc模块学习笔记
  10. 技嘉x58不支持服务器内存,一般机箱放不下 技嘉X58送海盗船内存
  11. 生产计划排产软件能为企业生产管理提供哪些帮助?
  12. 通过网页控制嵌入式设备
  13. Vue突然报错 doesn‘t work properly without JavaScript enabled
  14. pip命令大全 含换源方法
  15. linux基础知识(持续更新)
  16. 微信小程序:图片拼图小程序源码
  17. GNSS测量原理与应用(复习)
  18. 概率论基础 —— 4.五种重要的概率分布模型
  19. python rgb转整数_Python 转换RGB颜色值的示例代码
  20. 2021-05-23unity【组件的Enable / Disable】(组件的启用/禁用)-(即可控制组件显示/隐藏)

热门文章

  1. 软件智能:aaas系统中AI的任务能力和工作
  2. Protobuf解包组包
  3. 求分享如何给短视频加特效
  4. 怒江java培训班_Graal VM:微服务时代的Java
  5. CISSP-OSG-各章节书面实验整理
  6. microsoftstore连不上网_Microsoft Store登录不了怎么办 Microsoft Store登录不了解决方法...
  7. jdk安装https证书
  8. Java自学书籍推荐,java程序员面试算法宝典
  9. 国内云服务器哪家好?
  10. Android OpenCV应用篇三:提取图片中的文字