啊...表示一大早还没睡醒就开始打比赛(开始前一分钟的我还在桌子上趴着休眠)...表示题目思路清奇(尤其C题)...但是我还是太蒻了...\(D\)题暴力都没打...题解正式开始之前先\(\%\)一下\(\color{#FF6161}{风浔凌}\)巨佬\(qwq\)...\(320\)真是太强了\(\%\%\%\)...

\(A\) 你好诶加币

题目描述:就是简单的\(a+b\)啊(逃)

题目本质:数据范围是\(long\ long\)的\(a+b\)啊(逃)

思路:显然不可能直接算啊...所以并不可解(逃)

详解:非常显然爆\(long\ long\)的情况只有在\(a,b\)同号时才会出现,所以考虑按照\(a,b\)的符号来分类

  • \(a=0\ or\ b=0:\)此时\(a+b\)显然在\(long\ long\)范围内,直接输出\(a+b\)即可
  • \(a>0\ and\ b>0:\)此时有可能会爆\(long\ long\),但是又不能直接求和判断(所以就说不可解啊(逃)),此时可以间接判断,\(\because a,b\in[1,INF]\) \(\therefore INF-b\in[0,INF-1]\) \(\because a+b>INF\Leftrightarrow a>INF-b\) \(\therefore\)在\(long\ long\)范围内可以判断\(a+b\)是否爆\(long\ long\),若不爆\(long\ long\)则输出\(a+b\),否则输出\("hello, \%lld\backslash n"\)
  • \(a<0\ and\ b<0:\)同理,间接判断\(a+b\)是否爆\(long\ long\),若不爆\(long\ long\)则输出\(a+b\),否则输出\("hello, \%lld\backslash n"\)
  • \((a>0\ and\ b<0)or(a<0\ and\ b>0):\)此时不会爆\(long\ long\),直接输出\(a+b\)即可

\(AC\)代码:

#include<cstdio>//N165A
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<cstdlib> using namespace std; const long long INFZ=9223372036854775807LL,INFF=-9223372036854775808LL; long long a,b; int main(){
scanf("%lld%lld",&a,&b);
if(a==0||b==0){
printf("%lld\n",a+b);
return 0;
}
if(a>0&&b>0){
if(INFZ-a<b){
printf("\"hello, %%lld\\n\"\n");
return 0;
}
printf("%lld\n",a+b);
return 0;
}
if(a<0&&b<0){
if(INFF-a>b){
printf("\"hello, %%lld\\n\"\n");
return 0;
}
printf("%lld\n",a+b);
return 0;
}
printf("%lld\n",a+b);
return 0;
}

\(B\) 最后一次

题目描述:求不超过\(n(n\in[2,10^{12}])\)的最大质数

题目本质:就是求不超过\(n\)的最大质数啊(逃)

思路:看到数据范围之后显然不能直接算啊...所以并不可解(逃)

详解:考虑到质数的分布密度,可以从\(n\)开始倒序查找,复杂度大概在\(O(logn\cdot \sqrt{n})\)...(口胡)

\(AC\)代码:

#include<cstdio>//N165B
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<cstdlib> using namespace std; const int N=1e6; bool notpr[N+6]; int pr[80000],cntpr; long long n; void pre(){
notpr[0]=notpr[1]=true;
for(int i=2;i<=N;i++){
if(!notpr[i]){
pr[++cntpr]=i;
}
for(int j=1;j<=cntpr&&i*pr[j]<=N;j++){
notpr[i*pr[j]]=true;
if(i%pr[j]==0){
break;
}
}
}
} bool isprime(long long x){
if(x<2){
return false;
}
if(x==2||x==3){
return true;
}
int lmt=(int)sqrt(x);
for(int i=1;i<=cntpr&&pr[i]<=lmt;i++){
if(x%pr[i]==0){
return false;
}
}
return true;
} int main(){
pre();
scanf("%lld",&n);
if(n==2){
printf("2\n");
return 0;
}
if(n==3){
printf("3\n");
return 0;
}
if(isprime(n)){
printf("%lld\n",n);
return 0;
}
for(;n>2;--n){
if(isprime(n)){
printf("%lld\n",n);
return 0;
}
}
return 0;
}

\(C\) 选择颜色

题目描述:求一个长度为\(n(n\in[3,10^9])\)的有序环用\(c(c\in[3,100])\)种颜色染色,相邻颜色不相同的染色方式有多少种

题目本质:小学组合数学题(逃)

思路:如果是一条链不成环就非常容易...乘法原理就能解决...然而成环嘛...并不可解(逃)

详解:从简单的情况开始考虑,如果是一条链不成环那么结果显然是\(c\cdot (c-1)^{n-1}\),而成环之后的合法方式显然比不成环时少,少的部分是链染色方式中首尾颜色相同的部分,所以可以考虑用链方式数减链成环后不合法的方式数求出环合法染色方式数,此时问题就在于求链染色方式中首尾相同的方式数,此时问题可以转化为一个由\(n\)个点组成的无自环的无向完全图中长度为\(n-1\)的路径数,此时设\(f_{ij}\)表示从\(1\)出发到达\(j\)的长为\(i\)的路径条数,此时不难发现\(f_{i\ j}=\sum_{k=1}^{c}f_{i-1\ k}-f_{i-1\ j}\),据此可以考虑用矩阵快速幂完成线性递推求\(f_{n-1\ j}\),则有\(f_1\)矩阵$$\begin{vmatrix}f_{1\ 1}\f_{1\ 2}\f_{1\ 3}\\vdots\f_{1\ c}\end{vmatrix}=\begin{vmatrix}0\1\1\\vdots\1\end{vmatrix}$$基底矩阵为$$base=\begin{vmatrix}0&1&1&\cdots&1\1&0&1&\cdots&1\1&1&0&\cdots&1\\vdots&\vdots&\vdots&\ddots&\vdots\1&1&1&\cdots&0\end{vmatrix}$$则可求出从\(1\)出发到\(1\)路径长为\(n-1\)的路径条数\(f_{n-1\ 1}=f_{1\ 1}\times base^{n-2}\),同理可得不合法方式的总数为\(c\times f_{1\ 1}\times base^{n-2}\),故答案为\(c\times [(c-1)^{n-1}-f_{1\ 1}\times base^{n-2}]\),此时采用快速幂和矩阵加速求解即可

\(AC\)代码:

#include<cstdio>//N165C
#include<iostream>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<cstdlib> using namespace std; const int MOD=10007; const int C=100; int n,c; int ans; int base[C][C],f[C],repcc[C][C],repc1[C]; void pre(){
f[0]=0;
for(int i=1;i<c;i++){
f[i]=1;
}
for(int i=0;i<c;i++){
for(int j=0;j<c;j++){
if(i==j){
base[i][j]=0;
}
else{
base[i][j]=1;
}
}
}
} void mula(){
memset(repc1,0,sizeof repc1);
for(int i=0;i<c;i++){
for(int j=0;j<c;j++){
repc1[i]+=base[i][j]*f[j];
repc1[i]%=MOD;
}
}
for(int i=0;i<c;i++){
f[i]=repc1[i];
}
} void mulb(){
memset(repcc,0,sizeof repcc);
for(int i=0;i<c;i++){
for(int j=0;j<c;j++){
for(int k=0;k<c;k++){
repcc[i][j]+=base[i][k]*base[k][j];
repcc[i][j]%=MOD;
}
}
}
for(int i=0;i<c;i++){
for(int j=0;j<c;j++){
base[i][j]=repcc[i][j];
}
}
} void qpow(int u){
while(u){
if(u&1){
mula();
}
mulb();
u>>=1;
}
} long long llqpow(int base,int u){
long long rep=1;
while(u){
if(u&1){
rep*=base;
rep%=MOD;
}
base*=base;
base%=MOD;
u>>=1;
}
return rep;
} int main(){
scanf("%d%d",&n,&c);
pre();
ans=llqpow(c-1,n-1);
qpow(n-2);
ans-=f[0];
ans%=MOD;
ans+=MOD;
ans%=MOD;
ans*=c;
ans%=MOD;
printf("%d\n",ans);
return 0;
}

\(D\) 合法括号序列\(\color{#55ACEE}{表示这题还没过...暂且咕着qwq}\)

题目描述:

题目本质:

思路:

详解:

\(AC\)代码:


Nowcoder | [题解-N165]牛客网NOIP赛前集训营-普及组(第二场)的更多相关文章

  1. 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告

    目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...

  2. [牛客网NOIP赛前集训营-普及组(第二场)]D-合法括号序列

    链接:https://www.nowcoder.com/acm/contest/165/D来源:牛客网 合法括号序列 键盘上有左括号(,右括号),和退格键-,共三个键. 牛牛希望按键n次,使得输入的字 ...

  3. 牛客网NOIP赛前集训营-普及组(第七场)

    链接:C 来源:牛客网 牛牛的同学给牛牛表演了一个读心术:牛牛先任意选定一个非负整数,然后进行N次操作:每次操作前,假设牛牛当前的数是a,那么这个操作可能是a = a + x, 或者a = a * x ...

  4. 牛客网NOIP赛前集训营-普及组(第一场)

    前三题略 T4: 题目描述 小A有n个长度都是L的字符串.这些字符串只包含前8个小写字符,'a'~'h'.但这些字符串非常的混乱,它们几乎长得互不相同.小A想通过一些规则,让它们长得尽可能相同.小A现 ...

  5. 牛客网NOIP赛前集训营-普及组(第二场)

    T1 牛牛刚学习了输入输出,他遇到了一道这样的题目. 输入2个整数a和b 保证输入的a和b在long long范围之内,即满足 -9223372036854775808 <= a, b < ...

  6. 牛客网NOIP赛前集训营-普及组(第一场)C 括号

    括号 思路: dp 状态:dp[i][j]表示到i位置为止未匹配的 '(' 个数为j的方案数 状态转移: 如果s[i] == '(' dp[i][j] = dp[i-1][j] + dp[i-1][j ...

  7. 牛客网NOIP赛前集训营-普及组

    第一场: A-绩点 题目描述 小A刚考完大学考试.现在已经出了n门课的成绩,他想自己先算一下这些课的绩点是多少.设第i门课的他拿到的绩点是gpai,而这门课的学分是sci,那么他的总绩点用下面的公式计 ...

  8. 牛客网 NOIP赛前集训营-普及组(第四场)C--部分和 (高维前缀和)

    传送门 解题思路 高维前缀和模板题.首先,求前缀和有两种方式,比如说对于求二维前缀和来说. 第一种 : for(int i=1;i<=n;i++) for(int j=1;j<=n;j++ ...

  9. 牛客网NOIP赛前集训营-提高组(第四场)游记

    牛客网NOIP赛前集训营-提高组(第四场)游记 动态点分治 题目大意: \(T(t\le10000)\)组询问,求\([l,r]\)中\(k(l,r,k<2^{63})\)的非负整数次幂的数的个 ...

随机推荐

  1. java web石家庄铁道大学课程管理系统

    package kecheng Kc.java package kecheng; public class Kc { private int id; private String classname; ...

  2. php使用gd库输出中文内容的图片

    正如标题所说那样,本文只讨论输出内容全部为中文或者包含中文的情况.如果内容全是字母或者其他字符的话,可以参考这篇博客:生成验证码 问题 此处要注意,标题中为什么要区别windows和linux分别实现 ...

  3. [转帖]SPU、SKU、ID,它们都是什么意思,三者又有什么区别和联系呢?

    SPU.SKU.ID,它们都是什么意思,三者又有什么区别和联系呢? http://blog.sina.com.cn/s/blog_5ff11b130102wx0p.html 电商时代,数据为王. 所以 ...

  4. [转帖]国产紫光SSD不再只是实验室展品 开始批量出货

    国产紫光SSD不再只是实验室展品 开始批量出货 https://www.cnbeta.com/articles/tech/825865.htm 没听说有做HDD的 现做了SSD 弯道超车吗 可以实现全 ...

  5. webservice服务的提供及调用完整代码示例

    服务提供方: applicationContext.xml applicationContext-webService.xml  服务调用方:

  6. 将选中项的value值赋给select的title

    $('select').change(function () { $(this).attr("title",$(this).find("option:selected&q ...

  7. jQuery-mobilevalidate使用 的一些心得,小小总结

    在做M站时比较纠结的是表单验证,不像pc端,移动端的验证要求插件更小更轻量,更加灵活,说不定是冒气泡的报错提示?! 介绍一款好用的移动端的表单验证插件:jQuery-mobilevalidate: 代 ...

  8. CART算法与剪枝原理

    参考:https://blog.csdn.net/u014688145/article/details/53326910 知乎:https://www.zhihu.com/question/22697 ...

  9. hadoop 管理命令dfsadmin

    hadoop 管理命令dfsadmin dfsadmin 命令用于管理HDFS集群,这些命令常用于管理员. 1. (Safemode)安全模式 动作 命令 把集群切换到安全模式 bin/hdfs df ...

  10. countByValue

    [1,2,3,3]的RDD rdd.foreach(println)---------------------1 2 3 3