高一组模拟赛4 解题报告
时间:2019-09-12
本文章向大家介绍高一组模拟赛4 解题报告,主要包括高一组模拟赛4 解题报告使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
T1 八卦
不妨倒过来想,看看不满足情况的可能性有多少,第一个人有m种不同的话题,那么第二个人就有m-1种,第三个人也是m-1种,根据乘法原理可知有 ,然后用总数 减去它就好了,然后上述式子可以用快速幂。
代码:
#include <bits/stdc++.h> using namespace std; const int P=10003; long long n,m; long long power1(long long a,long long b,long long p) { a%=p; long long ans=1%p; for(; b; b>>=1) { if(b&1) ans=ans*a%p; a=a*a%p; } return ans; } int main() { cin>>m>>n; long long num1=power1(m-1,n-1,P); long long num2=power1(m,n,P); num1=(num1*m)%P; cout<<(num2+P-num1)%P; return 0; }
特别注意:在模n的意义下上述两式子相减可能为负数,所以在算的时候要在被减数上加一个模数P,,根据模运算的法则可知对结果没有影响。
T2线段
小数据显然是要求实现区间加,单点查询的一个结构。这不就是差分(线段树)么,关键在于最大的l和r范围在1e9之内,数组肯定会爆,但是n只有1e5,总共的数就是,可以离散化。
但是又有一个问题,那就是询问的点不一定正好在左右端点上,所以要离线处理,先把问题存下来,也将它离散,然后就查分就可以了,总共要存个数。
代码:
#include <iostream> #include <algorithm> using namespace std; const int N=1e5+10; int n,q,l[N],r[N]; int a[N*3],c[N*3]; int sum[N*3],ans[N],L,R; int m,tot,lpos,rpos,Q[N],num; inline void discrete() { sort(a+1,a+tot+1); m=unique(a+1,a+tot+1)-(a+1); } inline int query(int x) { return lower_bound(a+1,a+m+1,x)-a; } int main() { cin>>n; for(int i=1; i<=n; i++) { cin>>l[i]>>r[i]; a[++tot]=l[i]; a[++tot]=r[i]; } cin>>q; for(int i=1; i<=q; i++) { cin>>Q[i]; a[++tot]=Q[i]; } discrete(); for(int i=1; i<=n; i++) { lpos=query(l[i]); rpos=query(r[i]); c[lpos]++; c[rpos+1]--; } for(int i=1; i<=m; i++) sum[i]=sum[i-1]+c[i]; for(int i=1; i<=q; i++) { ans[++num]=sum[query(Q[i])]; } for(int i=1; i<=num; i++) cout<<ans[i]<<endl; return 0; }
T3身高
这道题...不说了,一个纯RMQ问题,用倍增,线段树都可以过。
代码:
#include <bits/stdc++.h> using namespace std; const int N=5e4; int f1[N][20],f2[N][20],a[N]; int ans[N],tot; int n,q,L,R; void prework() { for(int i=1;i<=n;i++){ f1[i][0]=a[i]; f2[i][0]=a[i]; } int t=log(n)/log(2)+1; for(int j=1;j<t;j++) for(int i=1;i<=n-(1<<j)+1;i++){ f1[i][j]=max(f1[i][j-1],f1[i+(1<<(j-1))][j-1]); f2[i][j]=min(f2[i][j-1],f2[i+(1<<(j-1))][j-1]); } } int ask(int l,int r){ int k=log(r-l+1)/log(2); return max(f1[l][k],f1[r-(1<<k)+1][k])-min(f2[l][k],f2[r-(1<<k)+1][k]); } int main() { cin>>n>>q; for(int i=1;i<=n;i++) cin>>a[i]; prework(); for(int i=1;i<=q;i++){ cin>>L>>R; ans[++tot]=ask(L,R); } for(int i=1;i<=q;i++) cout<<ans[i]<<endl; return 0; }
T4酒店
做法1:直接暴力枚举,,可以得到20分。
做法2:枚举+RMQ(ST表),,40分没问题了。
做法3:分析一下问题,如果顺着扫,扫到某种颜色,然后从它开始从右往左数,数到的第一个可行的酒店,那么在这个酒店之前的所有酒店都可行,通过这个,就可以得到的算法。
代码:
#include<bits/stdc++.h> using namespace std; const int N=2e6+10; unsigned long long n,k,p,b[N],d[N],sum[N],ans,temp,color,price; template<class I> inline void read(I &x) { x=0; char ch=getchar(); while(ch<'0'||ch>'9') ch=getchar(); while(ch>='0'&&ch<='9') { x=(x<<3)+(x<<1)+(ch&15); ch=getchar(); } } struct hotel { int c,p; } a[N]; int main() { cin>>n>>k>>p; for(int i=1; i<=n; i++) { read(color); read(price); if(price<=p) temp=i; if(b[color]<=temp) d[color]=sum[color]; ans+=d[color]; sum[color]++; b[color]=i; } cout<<ans<<endl; return 0; }
原文地址:https://www.cnblogs.com/wycxingchen/p/11513072.html
- ASP.NET:创建Linked ValidationSummary, 深入理解ASP.NET的Validation
- 【课堂笔记】先行者 3.0版本的vueJs课程的第二次课
- 用Python做证券指数的三种策略分析
- 明确告诉你,眼界不够,JS再好也成不了好前端
- 手把手教你整合最优雅的SSM框架
- WCF后续之旅(9):通过WCF的双向通信实现Session管理[上篇]
- 周末小贴士之“什么是语法糖”?有啥意义?
- Java反射机制深入详解
- 由for V.S. for each想到的
- 日调度5万亿次,腾讯云微服务架构体系TSF深度解读
- sed的粉丝
- 在Managed Code通过Google Gmail发送邮件以及如何通过Outlook配置Gmail
- 平方根的C语言实现(一) —— 浮点数的存储
- 用awk写递归
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- android 监听SD卡文件变化的实现代码
- Android监听手机短信的示例代码
- Android开发之图片压缩工具类完整实例
- Android6.0开发中屏幕旋转原理与流程分析
- Android中WebView的基本配置与填坑记录大全
- Android开发实现ListView异步加载数据的方法详解
- Android开发实现AlertDialog中View的控件设置监听功能分析
- 详解Android 语音播报实现方案(无SDK)
- Android实现中轴旋转特效 Android制作别样的图片浏览器
- Android使用DrawerLayout实现双向侧滑菜单
- Android实现3D推拉门式滑动菜单源码解析
- Android编程处理窗口控件大小,形状,像素等UI元素工具类
- Android开发实现的Log统一管理类
- Android中可以作为Log开关的一些操作及安全性详解
- 实例详解Android Webview拦截ajax请求