正题

比赛链接:https://ac.nowcoder.com/acm/contest/1085#question


成绩


总结

除了那道积分数学其他还好

后面没有FFF题的题解


T1:小sun的假期T1:小sun的假期T1:小sun的假期

题目大意

长度为nnn的序列,mmm个区间,求最大的没有被任何区间覆盖的区间。

解题思路

我们将区间按照右端点从大到小枚举,我们每次求从这个右端点往右可以扩展多少格。我们会发现只有右端点在它右边的会造成影响。而这个值就是这些区间最左的左端点。

codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+100;
struct node{int l,r;
}a[N];
int n,m,ans,Min;
bool cMp(node x,node y)
{return x.r<y.r;}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d%d",&a[i].l,&a[i].r);sort(a+1,a+1+m,cMp);Min=n;for(int i=m;i>=1;i--){ans=max(ans,Min-a[i].r);Min=min(Min,a[i].l);}printf("%d",ans);
}

T2:T2:T2:扫雷

题目大意

n∗mn*mn∗m的图,有一些雷,求每个位置旁边有多少雷

解题思路

暴力模拟不解释

codecodecode

#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
int a[1002][1002],n,m;
int main()
{//freopen("mine.in","r",stdin);//freopen("mine.out","w",stdout);scanf("%d%d\n",&n,&m);string s;for (int x=1;x<=n;x++){getline(cin,s);for (int y=0;y<m;y++){if (s[y]=='*'){for (int i=x-1;i<=x+1;i++)for (int j=y-1;j<=y+1;j++){if (i>=0 && j>=0 && i<=n && j<=m && a[i][j+1]!=23333)a[i][j+1]++;}a[x][y+1]=23333;}}}for (int i=1;i<=n;i++){for (int j=1;j<=m;j++)if (a[i][j]==23333) printf("%c",'*');else printf("%d",a[i][j]);printf("\n");}
}

T3:T3:T3: 异或和

题目大意

nnn个数,求出现次数为奇数的数异或和

解题思路

若出现次数为偶数,两两异或抵消,所以就是求所有数的异或和

codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,a,ans;
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a),ans^=a ;printf("%d",ans);
}

T4:T4:T4:解密

题目大意

加密方法是将字符串每个字符ccc变为(k1∗c+k2)%26(k1*c+k2)\%26(k1∗c+k2)%26。给一串加密后的,要求解密。

解题思路

暴力枚举解密后的,然后匹配即可。

codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
ll k1,k2,big,a,n;
char s[1100];
int main()
{scanf("%lld%lld",&k1,&k2);scanf("%s",s+1);n=strlen(s+1);for(ll i=1;i<=n;i++){big=(s[i]<='Z');a=s[i]-(s[i]<='Z'?'A':'a');for(ll j=0;j<=25;j++)if((j*k1+k2)%26ll==a){printf("%c",j+(big?'A':'a'));break;}}
}

T5:T5:T5:图的遍历

题目大意

一张无向图,每次走两步,求至少增加多少条边可以遍历完整张图

解题思路

考虑贪心,我们先考虑现在的图联通,我们可以将图分为偶点和奇点。偶点就是可以遍历到的,奇点就是不能的,我们发现若有奇点此时答案为1,否则为0.

那若是分为若干个联通块呢?我们会发现联通块之间无论如何连接并不会影响答案,所以直接暴力连接即可。

codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+100;
struct node{int to,next;
}a[N*2];
int n,m,ls[N],tot,ans,z,last;
bool v[N][2];
void addl(int x,int y)
{a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;
}
void dfs(int x,int k)
{if(v[x][k]) return;v[x][k]=1;for(int i=ls[x];i;i=a[i].next)dfs(a[i].to,k^1);
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);addl(x,y);addl(y,x);}last=1;dfs(1,1);for(int i=2;i<=n;i++)if(!v[i][0]&&!v[i][1]){ans++;dfs(i,1);addl(last,i);last=i;}memset(v,0,sizeof(v));dfs(1,1);for(int i=1;i<=n;i++)if(!v[i][1]){ans++;break;}printf("%d",ans+z);
}

T7:T7:T7:区间求和

题目大意

一个序列,每次询问一个区间[l,r][l,r][l,r]
∑i=lrai∗num(ai)\sum_{i=l}^r a_i*num(a_i)i=l∑r​ai​∗num(ai​)
num(ai)num(a_i)num(ai​)表示这个区间中aia_iai​的数量

解题思路

显然的莫队不解释。

codecodecode

#pragma GCC optimize(2)
%:pragma GCC optimize(3)
%:pragma GCC optimize("Ofast")
%:pragma GCC optimize("inline")
%:pragma GCC optimize("-fgcse")
%:pragma GCC optimize("-fgcse-lm")
%:pragma GCC optimize("-fipa-sra")
%:pragma GCC optimize("-ftree-pre")
%:pragma GCC optimize("-ftree-vrp")
%:pragma GCC optimize("-fpeephole2")
%:pragma GCC optimize("-ffast-math")
%:pragma GCC optimize("-fsched-spec")
%:pragma GCC optimize("unroll-loops")
%:pragma GCC optimize("-falign-jumps")
%:pragma GCC optimize("-falign-loops")
%:pragma GCC optimize("-falign-labels")
%:pragma GCC optimize("-fdevirtualize")
%:pragma GCC optimize("-fcaller-saves")
%:pragma GCC optimize("-fcrossjumping")
%:pragma GCC optimize("-fthread-jumps")
%:pragma GCC optimize("-funroll-loops")
%:pragma GCC optimize("-fwhole-program")
%:pragma GCC optimize("-freorder-blocks")
%:pragma GCC optimize("-fschedule-insns")
%:pragma GCC optimize("inline-functions")
%:pragma GCC optimize("-ftree-tail-merge")
%:pragma GCC optimize("-fschedule-insns2")
%:pragma GCC optimize("-fstrict-aliasing")
%:pragma GCC optimize("-fstrict-overflow")
%:pragma GCC optimize("-falign-functions")
%:pragma GCC optimize("-fcse-skip-blocks")
%:pragma GCC optimize("-fcse-follow-jumps")
%:pragma GCC optimize("-fsched-interblock")
%:pragma GCC optimize("-fpartial-inlining")
%:pragma GCC optimize("no-stack-protector")
%:pragma GCC optimize("-freorder-functions")
%:pragma GCC optimize("-findirect-inlining")
%:pragma GCC optimize("-fhoist-adjacent-loads")
%:pragma GCC optimize("-frerun-cse-after-loop")
%:pragma GCC optimize("inline-small-functions")
%:pragma GCC optimize("-finline-small-functions")
%:pragma GCC optimize("-ftree-switch-conversion")
%:pragma GCC optimize("-foptimize-sibling-calls")
%:pragma GCC optimize("-fexpensive-optimizations")
%:pragma GCC optimize("-funsafe-loop-optimizations")
%:pragma GCC optimize("inline-functions-called-once")
%:pragma GCC optimize("-fdelete-null-pointer-checks")
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cctype>
#define ll long long
using namespace std;
const int N=1e5+100;
struct node{ll l,r,id,pos;
}a[N];
ll n,m,w[N],l,r,now,id[N],t;
ll cnt[N],ans[N];
bool operator <(node x, node y) {return x.pos<y.pos||(x.pos==y.pos&&x.r<y.r);
}
inline ll read() {ll x=0,f=1; char c=getchar();while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();return x*f;
}
void print(ll x){if (x>9) print(x/10); putchar(x%10+48); return;
}
void add(ll x)
{now+=(2*cnt[x]+1)*x;cnt[x]++;}
void del(ll x)
{now-=(2*cnt[x]-1)*x;cnt[x]--;}
int main()
{n=read();m=read();t=sqrt(n);for(ll i=1;i<=n;i++)w[i]=read();for(ll i=1;i<=m;i++)a[i].l=read(),a[i].r=read(),a[i].id=i,a[i].pos=(a[i].l-1)/t+1;sort(a+1,a+1+m);l=1,r=0;for(ll i=1;i<=m;i++){while(l>a[i].l) add(w[--l]);while(r<a[i].r) add(w[++r]);while(l<a[i].l) del(w[l++]);while(r>a[i].r) del(w[r--]);ans[a[i].id]=now;}for(ll i=1;i<=m;i++)print(ans[i]),putchar('\n');
}

T8:T8:T8:取球游戏

题目大意

ccc种颜色,抽随机nnn个(每种颜色等概率),求最后是mmm种颜色个数为奇数的概率

解题思路

我们设fi,jf_{i,j}fi,j​表示抽到第iii个,颜色为jjj个的方案数,有
fi,j∗jc+&gt;fi+1,j−1f_{i,j}*\frac{j}{c}\ \ \ +&gt;\ \ \ f_{i+1,j-1}fi,j​∗cj​   +>   fi+1,j−1​
fi,j∗c−jc+&gt;fi+1,j+1f_{i,j}*\frac{c-j}{c}\ \ \ +&gt;\ \ \ f_{i+1,j+1}fi,j​∗cc−j​   +>   fi+1,j+1​

这个可以用矩阵乘法优化即可。

codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll Size=111;
ll n,c,m;
double a[Size][Size],ans[Size][Size],C[Size][Size];
void mulself() {for(ll i=0;i<=c;i++)for(ll j=0;j<=c;j++)C[i][j]=0;for(ll i=0;i<=c;i++)for(ll j=0;j<=c;j++)for(ll k=0;k<=c;k++)C[i][j]+=a[i][k]*a[k][j];for(ll i=0;i<=c;i++)for(ll j=0;j<=c;j++)a[i][j]=C[i][j];
}
void mul(){for(ll i=0;i<=c;i++)for(ll j=0;j<=c;j++)C[i][j]=0;for(ll i=0;i<=c;i++)for(ll j=0;j<=c;j++)for(ll k=0;k<=c;k++)C[i][j]+=a[i][k]*ans[k][j];for(ll i=0;i<=c;i++)for(ll j=0;j<=c;j++)ans[i][j]=C[i][j];
}
void ksm(ll b) {while(b){if(b&1) mul();mulself();b>>=1;}
}
int main()
{scanf("%lld%lld%lld",&c,&n,&m);a[0][1]=1;a[c][c-1]=1;for(ll i=1;i<c;i++)a[i][i+1]=(double)(c-i)/c,a[i][i-1]=(double)i/c;for(ll i=0;i<=c;i++)ans[i][i]=1;ksm(n);printf("%.3lf",ans[0][m]);
}

T9:T9:T9:坐电梯

题目大意

mmm个请求楼层,优先走到最高层的,求要多久才接到kkk楼

解题思路

在所有读入的数中求一个最大值hhh,然后答案就是2h−1−k2h-1-k2h−1−k

codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,k,maxs,num;
int main()
{scanf("%d%d",&n,&k);maxs=k;for(int i=1;i<=n;i++){scanf("%d",&num);maxs=max(maxs,num);}printf("%d",maxs-1+maxs-k);
}

T10:T10:T10:技术

题目大意

一序列中有的空缺了,求有多少种填数方式使得这是一个单调不降序列

解题思路

我们发现若一段连续的空缺lll,且这段空缺中可以填的数的个数为kkk,那么这段空缺的方案数就是Ck+l−1l−1C^{l-1}_{k+l-1}Ck+l−1l−1​(插板法)。然后计算方案数即可。

codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll XJQ=1e9+7,N=2e6+100;
ll num[N],n,ans=1,last=1000,z,inv[N];
ll C(ll n,ll m)
{if(n<m) return 0;ll ans=1;for(ll i=1;i<=m;i++)ans=ans*((n-i+1)%XJQ)%XJQ*inv[i]%XJQ;return ans;
}
int main()
{scanf("%lld",&n);inv[1]=1;for(ll i=2;i<=N;i++)inv[i]=inv[XJQ%i]*(XJQ-XJQ/i)%XJQ;for(ll i=1;i<=n;i++){scanf("%lld",&num[i]);if(num[i]){(ans*=C(last-num[i]+i-z-1,i-z-1))%=XJQ;last=num[i];z=i;}}(ans*=C(last-1+n-z,n-z))%=XJQ;printf("%lld",ans);
}

牛客小白月赛17-记录(附题解)相关推荐

  1. 牛客小白月赛60(A~C)题解

    原题地址:牛客小白月赛60_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ 题目A:小竹与妈妈 题意:输出(x-b)/a即可,没什么好说 代码: #include< ...

  2. 牛客小白月赛61_C-小喵觅食题解

    题目描述: 链接:登录-专业IT笔试面试备考平台_牛客网 来源:牛客网 现实世界可以抽象为一张 n×mn \times mn×m 大小的二维地图.PLMM 的初始坐标在 (x1,y1)(x_1,y_1 ...

  3. 牛客小白月赛17 F小黄鸭(计算几何+积分+二分)

    链接:https://ac.nowcoder.com/acm/contest/1085/F 来源:牛客网 题目描述 小sun的寝室有一只小黄鸭,小黄鸭浮在水面上的样子特别可爱,现在小sun有一个问题: ...

  4. 牛客小白月赛25 补题+题解[A-J]

    加油加油加油! 文章目录 A.AOE还是单体? B.k-size字符串 C.白魔法师 D.抽卡 E.点击消除 F.疯狂的自我检索者 G.解方程 H.神奇的字母(二) I.十字爆破 J.异或和之和 A. ...

  5. 牛客小白月赛17 F小黄鸭(计算几何+积分+二分)

    题目链接:https://ac.nowcoder.com/acm/contest/1085/F 题解: 根据,,可得① 球的正视图是个圆心为(0,r),半径为r的圆,方程为② 侵入水中的体积: 体积公 ...

  6. 牛客小白月赛17 A 小sun的假期

    题意已经很明显了,但是我首先是用暴力方法先把数字离散,再用离散后的值当下标来存这个数字出现了几次 1 #include<stdio.h> 2 #include<string.h> ...

  7. 牛客小白月赛37【部分题解】

    目录 A: 经此一役小红所向无敌[难度: 一般 / 知识点: 模拟] B: 擅长解密的小红同学[难度: 中 / 知识点: 组合数学 数学期望] D: 比那名居的桃子[难度: 一般 / 知识点: 前缀和 ...

  8. 牛客小白月赛65个人题解A-E

    1. 牛客小白月赛65 A. 牛牛去购物 题意:给定n元,购买价格为a元的篮球和价格为b的篮球,数量不定,要使得花掉的钱最多,也就是剩余的钱数最少,求这个值 (1 <= n, a, b < ...

  9. 牛客小白月赛19 题解

    牛客小白月赛19 A. 「水」滔天巨浪(思维) B. 「木」迷雾森林 (数字三角形模型) C. 「土」秘法地震(二维前缀和) F. 「水」悠悠碧波 (字符串) D. 「金」初心如金 (找规律) G. ...

最新文章

  1. linux文件权限详解
  2. linux下抓包代码阿里云,10.10 linux下抓包
  3. Channel延续篇
  4. 用 Python 实现打飞机,让子弹飞吧!
  5. UVALive5389 UVA414 POJ1493 ZOJ1339 Machined Surfaces
  6. 共建网络安全堤坝,守住网络安全底线
  7. iOS如何在iTunes网站查看并下载APP的dsym文件
  8. jetty 通过配置文件嵌入式启动web服务
  9. Cs231n课堂内容记录-Lecture 5 卷积神经网络介绍
  10. 《计算机导论》课程论文,计算机导论课程论文
  11. java object数组转实体类_详解Java中String JSONObject JSONArray List实体类转换
  12. wamp mysql中文_解决wampServer 中MySQL插入中文乱码问题
  13. sofia-sip下载地址
  14. OFFICE技术讲座:段落的行是如何布局不同对齐方式的
  15. python函数手册pdf_Python参考手册(第4版 修订版) ([美]大卫 M.比兹利) 中文pdf扫描版[102MB]...
  16. 计算机二级office易错知识点,重要!!!计算机二级office易错点汇总
  17. word,wps设置页眉和页码
  18. SIEBEL配置学习笔记
  19. 人脸识别算法一:特征脸方法(Eigenface)
  20. 【开源】整板资源介绍——疯壳·ARM双处理器开发板系列

热门文章

  1. jpa 默认生成sql语句_springboot-jpa自动创建数据库表
  2. java小数强制转换,Java中的强制类型转换 大数转小数
  3. html5 控制鼠标移动,HTML5 Canvas随鼠标移动的引力粒子群
  4. python frame用法_python—dataframe用法
  5. html中label的寬度無法修改,如何设置HTML span、label 的宽度
  6. echarts 地图自定义图标_DMKB08:Echarts 分段设色
  7. jbl css-h15,JBL CSS8006BM 天花音箱
  8. 剑指offer-数组中的重复的数字-p39
  9. mycli mysql_MyCLI :易于使用的 MySQL/MariaDB 客户端
  10. leetcode530. 二叉搜索树的最小绝对差