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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251712.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端安全之token

前端可以通过cookie以js的方式存取token&#xff0c;并且实现用户的登录登出以及token的超时操作&#xff0c;但这样做并不安全&#xff0c;无法避免跨站脚本的攻击&#xff0c;如果对项目的安全性要求比较高&#xff0c;应该在服务端开启http only为true&#xff0c;通过服务端…

gbk 转 UTF-8

iconv命令 gbk 转 UTF-8 -----linux gbk 转 UTF-8-------- iconv 用法 iconv -f "gbk" -t "utf-8" < infile > outfile 或者 piconv -f "gbk" -t "utf-8" < infile > outfile iconv -f utf-8 -t GBK 123456.txt 对传文件…

Mybatis中输入输出映射和动态Sql

一、输入映射我们通过配置parameterType的值来指定输入参数的类型&#xff0c;这些类型可以是简单数据类型、POJO、HashMap等数据类型1、简单类型2、POJO包装类型①这是单表查询的时候传入的POJO包装类型&#xff0c;即可以直接传入实体类&#xff0c;但是当多表查询的时候&…

css纯字母或者字母换行显示

white-space:normal; word-break:break-all;转载于:https://www.cnblogs.com/mmykdbc/p/7661009.html

javascript使用btoa和atob来进行Base64转码和解码

javascript中如何使用Base64转码 let str javascript;let btoaStr window.btoa(str); //转码结果 amF2YXNjcmlwdAconsole.log(btoaStr);console.log(window.atob(btoaStr)); //解码结果 javascriptBase64转码的对象只能是字符串, var str "China&#xff0c;中国"…

珠宝条码打印扫描解决方案

随着人们生活水平的逐步提高&#xff0c;珠宝消费日益增长&#xff0c;据统计&#xff0c;我国珠宝首饰零售规模超过7000亿&#xff0c;过去5年复合增长为15%&#xff0c;是规模增长最为迅速的可选消费品类之一。面对千亿级的消费市场&#xff0c;珠宝行业竞争激烈&#xff0c;…

课程作业1

1使用组合数公式利用n!来计算 a.设计思想 定义n和k&#xff0c;用递归函数表示出N!的阶乘结果&#xff0c;c(n,k)n!/(k!(n-k)!);调用函数求出c(n,k)的结果 b.源代码 package kecheng1; import java.util.Scanner; public class Test {public static void main(String[] args) {…

新手学Python推荐的四本书籍+2个资源网站

2019独角兽企业重金招聘Python工程师标准>>> 很多伙伴初学Python&#xff0c;会问到&#xff1a;有没有好的学习书籍推荐&#xff1f;有没有好的学习网站推荐&#xff1f; 针对这类伙伴的问题&#xff0c;小优给大家整理了学习Python的四本书籍2个资源网站&#xff…

【转】Linux系统编程---dup和dup2详解

正常的文件描述符&#xff1a; 在linux下&#xff0c;通过open打开以文件后&#xff0c;会返回一个文件描述符&#xff0c;文件描述符会指向一个文件表&#xff0c;文件表中的节点指针会指向节点表。看下图&#xff1a; 打开文件的内核数据结构 dup和dup2两个函数都可以用来复制…

Android Activity标签属性

Android Activity标签属性 Activity 是 Android 系统四大应用组件之一&#xff0c;用户可与 Activity 提供的屏幕进行交互&#xff0c;以执行拨打电话、拍摄照片、发送电子邮件等操作开发者必须在清单文件中声明要使用的 Activity&#xff0c;这样系统才能访问它。声明方式是在…

Java -----JVM运行时数据区

一、JVM体系结构 想要了解运行时数据区&#xff0c;先关注一下JVM的体系结构&#xff0c;知道数据区在JVM的整体位置和作用。 二、JVM运行时数据区 1.程序计数器 一块较小的内存空间&#xff0c;它是当前线程所执行的字节码的行号指示器&#xff0c;字节码解释器工作时通过改变…

20155235 《网络攻防》 实验八 Web基础

20155235 《网络攻防》 实验八 Web基础 实验内容 Web前端HTML(0.5分) 能正常安装、启停Apache。理解HTML&#xff0c;理解表单&#xff0c;理解GET与POST方法,编写一个含有表单的HTML。Web前端javascipt(0.5分) 理解JavaScript的基本功能&#xff0c;理解DOM。编写JavaScript验…

python每天1道面试题(3)--字符串组合

""" 题目3&#xff1a;输入一个字符串&#xff0c;输出该字符串中字符的所有组合。举个例子&#xff0c;如果输入abc&#xff0c;它的组合有a、b、c、ab、ac、bc、abc。解题思路: 先用列举法,举例出组合元素长度分别是1,2,..,len(str)时的具体元素, 然后发现当数…

【每周一图】蜂鸟

摄影/祈澈姑娘小花园偶遇的一只蜂鸟转载于:https://www.cnblogs.com/wangting888/p/9702088.html

API网关如何实现对服务下线实时感知

上篇文章《Eureka 缓存机制》介绍了Eureka的缓存机制&#xff0c;相信大家对Eureka 有了进一步的了解&#xff0c;本文将详细介绍API网关如何实现服务下线的实时感知。 一、前言 在基于云的微服务应用中&#xff0c;服务实例的网络位置都是动态分配的。而且由于自动伸缩、故障和…

TCP为什么要三次握手和四次挥手

http://www.jellythink.com/archives/705 简析TCP的三次握手与四次分手 https://zhuanlan.zhihu.com/p/24001696 计算机网络面试题 https://www.zhihu.com/question/36930631 TCP四次分手中&#xff0c;主动关闭方最后为什么要等待2MSL之后才关闭连接&#xff1f; http://ww…

Java处理文件BOM头的方式推荐

背景&#xff1a; java普通的文件读取方式对于bom是无法正常识别的。 使用普通的InputStreamReader&#xff0c;如果采用的编码正确&#xff0c;那么可以获得正确的字符&#xff0c;但bom仍然附带在结果中&#xff0c;很容易导致数据处理出错。另外&#xff0c;对于存在BOM头的…

封装svg组件

如何封装svg图标组件 封装svg图标组件的方法有很多种&#xff0c;如果只是单纯的想使用svg图标&#xff0c;可以将svg导出fonts字体图标使用&#xff0c;但这样做会失去svg原有的样式与尺寸&#xff0c;也可以当成img图片或者背景引入&#xff0c;但这样做非常繁琐。 最近项目中…

RabbitMQ 延迟队列,消息延迟推送

应用场景 目前常见的应用软件都有消息的延迟推送的影子&#xff0c;应用也极为广泛&#xff0c;例如&#xff1a; 淘宝七天自动确认收货。在我们签收商品后&#xff0c;物流系统会在七天后延时发送一个消息给支付系统&#xff0c;通知支付系统将款打给商家&#xff0c;这个过程…

windows Navicat Premium连接oracle

需要下载并指定Instant Client 下载地址&#xff1a;在oracle官网搜索Instant Client Downloads选择自己需要的客户端 //说明 //Navicat 版本 9 或以上捆绑了 instant client&#xff0c;但是捆绑的用不了&#xff0c;捆绑的10.2。因此下载高版本替换之 //版本有要求&#xff0…