牛客周赛 Round 31(A~F)
A
#include <bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define ull unsigned long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back
using namespace std;
const int N=2e5+10;
void solve()
{
string s;cin>>s;
if(s=="kou") s="yukari";
cout<<s<<endl;
return;
}
signed main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
// freopen("1.in", "r", stdin);
int _;
// cin>>_;
// while(_--)
solve();
return 0;
}
B
#include <bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define ull unsigned long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back
using namespace std;
const int N=2e5+10;
void solve()
{
int n;cin>>n;
auto check=[&](int tar)
{
if(tar==1) return false;
rep(i,2,tar/i) if(tar%i==0) return false;
return true;
};
int ans=0;
for(int i=1;i<=n/i;++i)
{
if(n%i==0)
{
if(check(i)) ans++;
if(i==n/i) continue;
if(check(n/i)) ans++;
}
}
cout<<ans<<endl;
return;
}
signed main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
// freopen("1.in", "r", stdin);
int _;
// cin>>_;
// while(_--)
solve();
return 0;
}
C
c题比较有用的应该还是得有贡献法这种思想。
#include <bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define ull unsigned long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back
using namespace std;
const int N=2e5+10;
void solve()
{
int n;cin>>n;
char c;cin>>c;
string s;cin>>s;
int ans=0;
rep(i,0,s.size()-1)
{
if(s[i]==c) ans+=min(i+1,n-i);
}
cout<<ans<<endl;
return;
}
signed main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
// freopen("1.in", "r", stdin);
int _;
// cin>>_;
// while(_--)
solve();
return 0;
}
D
链表的模板。
需要注意的是这题的数据范围\(x、y给到了1e9\)不能用数组去模拟,直接用map去模拟
#include <bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define ull unsigned long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back
using namespace std;
const int N=2e5+10;
map<int,int> l,r;
void solve()
{
int q;cin>>q;
r[0]=1e9+1;l[1e9+1]=0;
auto add=[&](int now,int tar)
{
l[now]=tar;r[now]=r[tar];
l[r[tar]]=now; r[tar]=now;
};
auto remov=[&](int tar)
{
r[l[tar]]=r[tar];
l[r[tar]]=l[tar];
};
while(q--)
{
int op;cin>>op;
if(op==1)
{
int x,y;cin>>x>>y;
add(x,y);
}
else
{
int x;cin>>x;
remov(x);
}
}
int cnt=0;
for(int i=r[0];i!=1e9+1;i=r[i]) cnt++;
cout<<cnt<<endl;
for(int i=r[0];i!=1e9+1;i=r[i]) cout<<i<<' ';
return;
}
signed main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
// freopen("1.in", "r", stdin);
int _;
// cin>>_;
// while(_--)
solve();
return 0;
}
E
这道题目也是一道比较经典的dp。
没看出来.
\(dp[i][j]:表示对前i个数进行操作,总和为j的最小操作次数\)
\(转移:dp[i][j]=min(dp[i][j+a[i]],dp[i][j-a[i]]+1)\)
\(初始化:dp[0][40000]=0,其余均是无穷大\)
注意这道题目有负数,可以将dp数组开成mp,但是最好不要这么去做,因为mp有个\(log\)
一般的做法是加上一个偏移量使每个数都变成正数。
#include <bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define ull unsigned long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back
using namespace std;
const int N=80010;
int dp[210][N];
void solve()
{
int n;cin>>n;
memset(dp,0x3f,sizeof(dp));
dp[0][40000]=0;
rep(i,1,n)
{
int xx;cin>>xx;
rep(j,0,80000)
{
if(j+xx>=0&&j+xx<=80000) dp[i][j]=min(dp[i][j],dp[i-1][j+xx]);
if(j-xx>=0&&j-xx<=80000) dp[i][j]=min(dp[i][j],dp[i-1][j-xx]+1);
}
}
if(dp[n][40000]>=n) cout<<-1;
else cout<<dp[n][40000]<<endl;
return;
}
signed main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
// freopen("1.in", "r", stdin);
int _;
// cin>>_;
// while(_--)
solve();
return 0;
}
F
今天下午在补寒假营的题,里面有道用道第二类斯特林数的知识点还没补完,刚好这道题也是组合数学的就补一下,尽快把组合数学的知识点给补一下吧。
思路:
对于连续段的个数的枚举是少不了的因为这是答案
然后考虑对于i个连续段的情况。
我们的目标串可能是什么样的。
\(aaabbbb...aa..bba...\)
\(bbbaaab....aa..bb...\)
要么是a开头要么是b开头。然后连续若干个b连续若干个a
如果是a开头,分成i段那么a的段可能会比b多一点,因为a先出现,奇数的话就是a多,否则两者段一样多,那么a的段数用\(ca表示ca=i/2+i%2,cb=i-ca\)
考虑如何将x个a分成ca份,并且每份都不空:显然可以用隔板法
关于隔板法:隔板法
y分成cb份并且每份都不空。两者应用乘法原理相乘
b开头情况是一样的。
a、b开头是两种不同的情况,用加法原理就是段数为i的情况。
代码参考兰子哥的。
#include <bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i = (a); i <= (b); ++i)
#define fep(i,a,b) for(int i = (a); i >= (b); --i)
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define ull unsigned long long
#define db double
#define endl '\n'
#define x first
#define y second
#define pb push_back
using namespace std;
const int N=2010;
int jc[N],mod=1e9+7;
void solve()
{
auto qmi=[&](int a,int b,int p)
{
int res=1;
while(b)
{
if(b&1) res=res*a%p;
b>>=1;
a=(a*a)%p;
}
return res;
};
jc[0]=1;
rep(i,1,2000) jc[i]=jc[i-1]*i%mod;
auto C=[&](int n,int m)
{
if(m<0||n-m<0||n<0) return 1ll*0;
return jc[n]*qmi(jc[m],mod-2,mod)%mod*qmi(jc[n-m],mod-2,mod)%mod;
};
int x,y;cin>>x>>y;
rep(i,1,x+y)
{
int ca=i/2;
int cb=i-ca;
ll ans=0;
ans=(ans+(C(x-1,ca-1)*C(y-1,cb-1))%mod)%mod;
swap(ca,cb);
ans=(ans+(C(x-1,ca-1)*C(y-1,cb-1))%mod)%mod;
cout<<ans<<endl;
}
return;
}
signed main()
{
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
// freopen("1.in", "r", stdin);
int _;
// cin>>_;
// while(_--)
solve();
return 0;
}
牛客周赛 Round 31(A~F)的更多相关文章
- 牛客假日团队赛5 F 随机数 BZOJ 1662: [Usaco2006 Nov]Round Numbers 圆环数 (dfs记忆化搜索的数位DP)
链接:https://ac.nowcoder.com/acm/contest/984/F 来源:牛客网 随机数 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...
- 牛客周赛11TG B-弹钢琴
链接:https://ac.nowcoder.com/acm/contest/941/B来源:牛客网 题目描述 春希想听和纱弹钢琴! 为了阻止异变的发生,Pi将钢琴魔改了 钢琴上有 N 个键,每个键有 ...
- 牛客练习赛19 E和F(签到就走系列)托米的饮料+托米搭积木
E题传送门:点我 F题传送门:点我 可爱的小托米得到了n瓶饮料. 但他不小心把开盖的工具弄丢了,所以他只能利用饮料瓶来开盖. 已知第i个瓶子的品牌为ai,且其能打开bi品牌的瓶子. 问有几瓶饮料托米无 ...
- 牛客国庆集训派对Day2 F、平衡二叉树 【构造+记忆化搜索】
任意门:https://www.nowcoder.com/acm/contest/202/F 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 1048576K,其他语言2097152K6 ...
- [牛客OI测试赛2]F假的数学游戏(斯特灵公式)
题意 输入一个整数X,求一个整数N,使得N!恰好大于$X^X$. Sol 考试的时候只会$O(n)$求$N!$的前缀和啊. 不过最后的结论挺好玩的 $n! \approx \sqrt{2 \pi n} ...
- 牛客假日团队赛2 F.跳跃
链接: https://ac.nowcoder.com/acm/contest/924/F 题意: Farmer John为了满足奶牛对美的享受而安装了人工湖.矩形的人工湖分成M行N列(1 <= ...
- 【牛客小白月赛6】F 发电 - 树状数组&快速幂&逆元
题目地址:https://www.nowcoder.com/acm/contest/136/F 树状数组.快速幂.逆元的模板运用: #include<iostream> #include& ...
- 【牛客Wannafly挑战赛23】F 计数
题目链接 题意 给定一张边带权的无向图,求生成树的权值和是 k 的倍数的生成树个数模 p 的值. \(n\leq 100,k\leq 100,p\mod k=1\) Sol 看见整除然后 \(p\mo ...
- 优化剪枝搜索——牛客多校第二场F
试了很多种爆搜和剪枝,最后发现还是状压的比较好用 #include <bits/stdc++.h> using namespace std; // #define IO #define f ...
- 2019 牛客多校第一场 F Random Point in Triangle
题目链接:https://ac.nowcoder.com/acm/contest/881/F 题目大意 给定二维平面上 3 个整数表示的点 A,B,C,在三角形 ABC 内随机选一点 P,求期望$E ...
随机推荐
- vim 从嫌弃到依赖(7)——可视模式
vim 的可视模式下可以选择一个区域,然后针对区域进行操作.可视模式有点类似于在其他编辑器上使用鼠标选中一块区域然后针对区域进行操作. vim中有3种可视模式,分别用来处理不同范围的文本: 处理字符的 ...
- 试用Proxmox VE 8.0搭建云桌面系统
6月22日发布了其服务器虚拟化管理平台 Proxmox 虚拟环境的稳定版 0.12.这个主要版本基于最新的Debian 7("书虫"),并为Proxmox VE 4.8或旧版本的用 ...
- git常用命令(企业级)
一: 常用git命令 # 初始化,将已有的文件初始化为git仓库 git init # 查询文件状态[绿色暂存区,红色表示工作区更改了,没有提交到暂存区] git status git status ...
- 阿里云数仓Dataworks数据导出到文件step by step
背景 假设你在阿里云上Dataworks的空间space下有一个表table_A,想要把它的数据导出到文件以供后续使用,但是数据量又很多,从浏览器复制不太现实.阿里云提供了Java和Python版本的 ...
- Linux输出转换命令 xargs
一.基本用法 xargs命令的作用,是将标准输入转为命令行参数. 原因:大多数命令都不接受标准输入作为参数,只能直接在命令行输入参数,这导致无法用管道命令传递参数 如下面 echo 不接受标准输出做参 ...
- Dijkstra实现单源最短路
Dijkstra算法求单源最短路 Dijkstra算法应用于求一个给定图的单个源点到其他各顶点的最短路.其中应用Dijkstra算法的图应满足如下条件 图中没有负权边 有向或者无向图都可以 图中若有自 ...
- [SpringBoot][Maven]关于maven pom文件的packaging属性
关于maven pom文件的packaging属性 前几天在调试源码运行程序的时候,因为将项目中pom文件的packaging属性用错导致源码包无法引入使用而报Bean注入错误,在此进行总结整理记录. ...
- Pandas 人口密度案例分析
from turtle import left import pandas as pd """ 需求: 1.导入文件,查看原始数据 2.将人口数据和各州简称数据进行合并 ...
- AIR32F103(十二) 搭载 AIR32F103CBT6 的Bluepill核心板
目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告 AIR32F103(二) Linux环境和LibOpenCM3项目模板 AIR32F103(三) Linux环境基于标准外 ...
- 欧拉公式 Euler's Formula
欧拉公式是数学中最重要的公式之一, 它涉及到了复数, 无理数, 三角函数, 简单优美 \(e^{i\theta} = cos(\theta) + isin(\theta)\) 欧拉公式代表的含义并不是 ...