10.13 上午 考试
T1
直接二分就好了
#include <cstdio> #include <cstring> #include <iostream> #include <cmath> #include <cstdlib> #include <algorithm> #define ll long long #define mem(a,b) memset(a,b,sizeof(a)) using namespace std;ll n; int a,b,d;ll check(ll x) {ll t1,t2;t1=(ll)(x-a-1)/d+1;if(x>b)t2=(ll)(x-b-1)/d+1;elset2=(ll)(b-x-1)/d+1;return t1+t2; }ll work1() {ll ans=max(a,b),l=max(a,b),r=((ll)1<<60),mid,temp;while(l<=r){mid=(l+r)>>1;temp=check(mid);if(temp<=n&&ans<mid)ans=mid;if(l>=r)break;if(temp<=n)l=mid+1;elser=mid-1;}return ans; }int main(){//freopen("T1.in","r",stdin); scanf("%lld%d%d%d",&n,&d,&a,&b);--n;cout<<work1(); }
T1
T2
预处理出来每个点
$L_i$ i左边第一个比它大的点的位置
$R_i$ i右边第一个大于等于它的位置(这样是为了统计的时候不重复)
那么K==$a_i$的区间个数就是$$\sum_{a_i==K}(i-L_i)(R_i-i)$$
然后求一下前缀和和后缀和就行了
#include <cstdio> #include <cstring> #include <iostream> #include <cmath> #include <cstdlib> #include <algorithm> #define ll long long #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; inline int read() {char q=getchar();int ans=0;while(q<'0'||q>'9')q=getchar();while(q>='0'&&q<='9'){ans=ans*10+q-'0';q=getchar();}return ans; } inline char readchar() {char q=getchar();while(q!='<'&&q!='>'&&q!='=')q=getchar();return q; } const int N=100006;struct JI {int ff,pos,val;bool friend operator < (JI a,JI b){return a.val<b.val;} }ji[N*3]; int ccc;int now; int n,Q; int a[N],K[N]; char op[N];void lisan() {now=0;sort(ji+1,ji+1+ccc);for(int i=1;i<=ccc;++i){if(ji[i].val!=ji[i-1].val)++now;if(ji[i].ff==1)a[ji[i].pos]=now;elseK[ji[i].pos]=now;} }int L[N],R[N];ll num[N*3],presum[N*3],behsum[N*3];int zhan[N*2],he; void work() {a[0]=a[n+1]=0x7fffffff;he=0;zhan[++he]=0;for(int i=1;i<=n;++i){while(a[zhan[he]]<=a[i])--he;L[i]=zhan[he];zhan[++he]=i;}he=0;zhan[++he]=n+1;for(int i=n;i>=1;--i){while(a[zhan[he]]<a[i])--he;R[i]=zhan[he];zhan[++he]=i;}for(int i=1;i<=n;++i)num[a[i]]+=(ll)(i-L[i])*(R[i]-i);for(int i=1;i<=now;++i)presum[i]=presum[i-1]+num[i];for(int i=now;i>=1;--i)behsum[i]=behsum[i+1]+num[i];for(int i=1;i<=Q;++i){if(op[i]=='=')printf("%lld\n",num[K[i]]);elseif(op[i]=='<')printf("%lld\n",presum[K[i]-1]);elseprintf("%lld\n",behsum[K[i]+1]);} }int main(){freopen("T2.in","r",stdin);n=read();Q=read();for(int i=1;i<=n;++i){++ccc;ji[ccc].val=read();ji[ccc].ff=1;ji[ccc].pos=i;}for(int i=1;i<=Q;++i){op[i]=readchar();++ccc;ji[ccc].ff=2;ji[ccc].val=read();ji[ccc].pos=i;}lisan();work(); }
T2
T3
$f_i$ 所有排列长度为 i 排完序所需要的总步数
那么 $$f_i=i*f_{i-1}+(2^{i-1}-1)*fac_{i-1}$$
我们考虑第 i 位都是谁
是i时,直接加上$f_{i-1}$
1时,加上$f_{i-1}+2^0*fac_{i-1}$
...
然后求和就可以 $O(n)$ 了
解释一下转移:
fac就是阶乘,即长度为 i-1 的排列个数
每次在长度i-1的后面添加一个数x (当然,前i-1个数里可能有i)
那把x扔到第x位需要$2^{x-1}$次(i需要0次)
证明:
比如 3 1 2 弄成 1 2 3 需要3次
4 1 2 3 弄成 1 2 4 3 也需要3次
因为 4可以看成3 再把 3扔到开头到有序,又相当于重复了一遍3 1 2 到 1 2 3 的过程
#include <cstdio> #include <cstring> #include <iostream> #include <cmath> #include <cstdlib> #include <algorithm> #define ll long long #define dd double #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; const int N=100006; const int mod=1e9+7;ll qpow(ll a,int ci) {ll ans=1;while(ci){if(ci&1)ans=ans*a%mod;a=a*a%mod;ci>>=1;}return ans; }ll jie[N],jieni[N]; void chu() {jie[0]=1;for(int i=1;i<N;++i)jie[i]=jie[i-1]*i%mod;jieni[N-1]=qpow(jie[N-1],mod-2);for(int i=N-2;i>=1;--i)jieni[i]=jieni[i+1]*(ll)(i+1)%mod;jieni[0]=1; }int n; ll f[N],mi[N];int main(){chu();scanf("%d",&n);mi[0]=1;for(int i=1;i<=n;++i){mi[i]=mi[i-1]*2%mod;f[i]=f[i-1]*i%mod+(mi[i-1]-1+mod)%mod*jie[i-1]%mod;}printf("%lld", f[n]%mod*jieni[n]%mod ); }
T3
想不出来也是一种无奈...
转载于:https://www.cnblogs.com/A-LEAF/p/7660543.html
10.13 上午 考试相关推荐
- 2012年信息系统项目管理师下半年上午考试习题与答案解析
2012年下半年上午考试习题与答案解析 1.某信息系统项目采用原型法开发,以下做法中不正确的是(1) A.前期花足够的时间与客户充分沟通,完全明确需求后再开发实现 B.系统分析.设计和实现工作之间不做 ...
- 软考网络工程师上午考试知识点总结整理
楼主顺利通过了软考网络工程师中级资格考试,在复习过程中对上午考试的知识点进行了总结,总结了很多,但可能条理性不够强,但都是一些难掌握或者重点,常考的点,所以分享出来,可以帮助大家复习准备~ 第一章 编 ...
- 在macOS 10.13.6上安装go 1.13.8实录
因为一些原因,需要在rMBP上开发Go程序,下面记录一下在macOS 10.13.6上安装Go 1.13.8的过程. 其实整个过程非常简单,使用HomeBrew来安装和升级软件非常方便.就一行命令搞定 ...
- 系统升级到10.13之后cocoapods安装失败问题解决办法
系统升级到最新版本(10.13.x)之后发现cocoapods更新失败了,重新安装之后也提示如下错误: $ pod setup -bash: /usr/local/bin/pod: /System/L ...
- lightgbm过去版本安装包_云顶手游10.13安装包,6月24日
重要:此次更新是季中版本,完整版本号:10.13.3257485安卓安装包在下方,苹果请用国外Apple ID登录App Store,搜索TFT下载或更新版本,教程在公众号菜单栏.安卓安装包下载方式: ...
- 七周三次课(11月29日) 10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfilter5表5链介绍 10.14 iptables语法...
2019独角兽企业重金招聘Python工程师标准>>> 10.11 Linux网络相关 ifconfig 查看网卡ip (yum install net-tools) 安装 -a ...
- 电动力学每日一题 2021/10/13 用Fourier变换法计算静止电荷产生的电场
电动力学每日一题 2021/10/13 用Fourier变换法计算静止电荷产生的电场 静止点电荷 具有均匀线密度的静止电荷产生的电场 具有均匀面密度的静止电荷产生的电场 用Fourier变换法计算电场 ...
- 七周三次课(1月24日) 10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfilter5表5链介绍 10.14 iptables语法...
七周三次课(1月24日) 10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfilter5表5链介绍 10.14 iptables语法 ====== ...
- java db 10.4.13_Spring Data MongoDB 1.10.13和Mongo 3.4
我正在尝试从Mongo 3.2升级到Mongo 3.4 . 我更新了我的POM以使用最新的Spring Data MongoDB(1.10.13),同时这样做,我注意到Spring Data Mong ...
最新文章
- string.Join和Reverse的简单使用示例
- 分布式消息技术 Kafka
- 在Windows XP 中使用Active Directory(活动目录)
- 使用Jquery 结合后台数据库显示类似QQ图片中心
- 三星s9android recovery,三星手机怎么进入recovery模式?详细图文教程指导
- FinalShell SSH工具下载
- 一篇极好的 CSS 教程 (ZZ)
- 伪代码之KMeans和DBSCAN
- 麒麟MIPS:用光盘安装提示Out Of Memory,用U盘安装成功
- Unity3D 5.0软件安装教程
- Postman中文版 !!!!傻瓜教程
- Elastic 配置 TLS 加密传输
- (简单)SQL练习13:从titles表获取按照title进行分组
- AI领域首位图灵奖得主Marvin Minsky:求索“智能”奥秘的一生 | 人物志
- 【思考】人脸认证真的准确吗?通过身份证的人脸对比有哪些问题?
- AlexNet VGGNet ResNet 对比 简介
- 插件 实用的窗口置顶小工具 TopMost
- STLINK驱动安装不正确问题简单记录
- linux隧道6rd配置
- el-table 树形表格 自定义展开图标_iOS 14自定义桌面太美了 手把手教你重温青春...
热门文章
- unity3d 自动变化大小_一种可扩展的Unity3d资源检查方式
- redis 一般启动几个 哨兵_Redis6.0主从、哨兵、集群搭建和原理
- 如果让我重做一次研究生--王泛森院士
- 【编译原理】文法的基本概念
- ajax绑定事件页面重复提交,ajax防止用户重复提交点击事件
- linux搭建flask环境,Ubuntu 环境下搭建Flask框架
- linux里如何创建c文件夹,使用c语言在Linux中的/ tmp文件夹中创建文本文件
- 【超分辨率实验】基于高斯模糊的训练数据集构建方法改进(matlab)
- POJ 3267为什么优先队列超时,DP就能过,难过
- ERROR: Can't get master address from ZooKeeper; znode data == null