金山中学 rugular SRM 04 ——纪念我的第一次Ak
虽然只是一场比较简单的比赛 但奈何我也比较弱啊....
T1 一道计算概率的题目
T SRM 04
描述
给个长度为 n 的数列,每次操作能将数列打乱(RandomShuffle),问在期望下需要多少次操作才能得到一个不降数列。
输入格式
第一行一个整数 n 表示数列长度
第二行 n 个整数 表示数列
输出格式
一个小数表示期望操作次数,四舍五入至 6 位小数输出
样例输入
2
5 2
样例输出
2.000000
数据范围与约定
这道题想了一下 发现n很小那么n这么小,原因竟然是。。最小答案随n增大而超指数级衰减?
所以我写了个没有重复元素的全排列就是答案了 当然还得特殊考虑一开始就是符合要求而不需要打乱的情况 然后四舍五入
我是这么写的printf("%.6lf",ans+1e-10); 因为啊%.6f 是输出六位,四舍六入,为了四舍五入就+eps
贴一波代码 233
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n;
int w[],sum[];
double ans=,mx;
bool f=;
int main()
{
n=read();
for(double i=n;i;i=i-) ans=ans*i;
for(int i=;i<=n;i++){
w[i]=read(); sum[w[i]]++;
if(w[i]<w[i-]) f=;
}
if(f){printf("%.6lf\n",1.0*); return ;}
for(int i=;i<=;i++){
if(sum[i]<=) continue;
mx=;
for(double k=;k<=sum[i];k=k+) mx=mx*k;
ans=ans/mx;
}
printf("%.6lf",ans+1e-);
return ;
}
T2
J SRM 04
背景&&描述
在一个似曾相识的春分的前一天,罚吹们组队参加了新岛老贼组织的ghost parade
游行在一条大街上举行,出于反情侣的目的,新岛老贼做规划的时候使得中央的过道仅能容一人通过。
大街上有n个扭曲的改改人从各自的位置出发,想要到自己选定好的位置进行传教活动。
这本来是件小事,但是中国有一句古话,叫做一万个罚吹心中有一万部罚抄,所以如果俩改改人在路上相遇的话就会上演全武行..
幸好新岛老贼在大街两端留了足够的空间,改改人们可以先走到两端,再一个个走到目标位置。
大街长度为L,两端分别是和
,第i个改改人一开始在
,想要走到
。
显然肯定存在合法的方案使得全程不会有俩改改人在不是端点的地方相遇。
新岛老贼想知道所有改改人移动长度总和的最小值,不然他就会把你的mz写死(
输入格式
多组数据。第一个整数T表示数组组数。
对于每组数据:
第一行俩整数n和L。
接下来有n行,每行俩整数,第i+1行的两个数分别表示和
。
输出格式
对于每组数据输出一行一个整数,表示移动距离之和的最小值。
样例输入1
1
2 10
3 8
9 6
样例输出1
14
样例输入2
1
4 20
6 13
11 4
5 7
12 14
样例输出2
48
数据范围与约定
,保证同组数据里,
各不相同,
各不相同。
样例解释1
第二个人走到右端,第一个人走到右端,第二个人走到自己的目的地,第一个人走到自己的目的地。
样例解释2
第3、1、2个人依次走到左端,第4、1、3、2个人依次走到目的地。
这道题以前写过题解hh
两个看一个就行了 不过贪心确实跑得比较快 原题是51nod的狭窄的通道 有兴趣做做哇 题目传送门
T3
M SRM 04
描述
给 n 个数 ,有 Q 个询问 [L,R],每次求出有多少二元组
同时满足
和
输入格式
第一行两个整数 n 和 Q
第二行 n 个整数
接下来 Q 行,每行代表一次询问,每行有两个整数为 L 和 R
输出格式
对于每次询问,依次输出其所得到的值
样例输入
3 2
3 2 1
1 2
1 3
样例输出
1
3
数据范围与约定
- 有坑点,请仔细阅读题目
T3我是最后写的因为考虑到有坑点qwq 但是最后发现确实有坑点因为std错了.....最后重测才Ac的 也是还了个愿吧
这道题正解应该是树状数组求逆序数对 但是我不会哇 233 所以就n2暴力写了一波 还好没被卡
sum【i】【j】就是i这个数到j(可前可后)有多少个符合条件的数和他组成数对 这样就可以o(n2)预处理然后0(1)查询了
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
LL read(){
LL ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
LL n,q,x,y;
LL v[];
int sum[][],f[][];
int main()
{
n=read(); q=read();
for(int i=;i<=n;i++) v[i]=read();
for(int i=;i<=n;i++){
for(int j=i-;j;j--){
sum[i][j]=sum[i][j+];
if(v[j]>=v[i]) sum[i][j]++;
}
for(int j=i+;j<=n;j++){
sum[i][j]=sum[i][j-];
if(v[i]>=v[j]) sum[i][j]++;
}
}
//printf("%d\n",f[0][0]);
// for(int i=1;i<=n;i++,printf("\n")) for(int j=1;j<=n;j++) printf("[%d] ",sum[i][j]);
for(int l=;l<n;l++)
for(int r=l+;r<=n;r++)
f[l][r]=f[l][r-]+sum[r][l];
//printf("%d\n",f[1][2]);
//printf("%d\n",sum[2][1]);
while(q--){
x=read(); y=read(); //printf("[%lld %lld]\n",x,y); printf("%d\n",f[1][2]);
x=max(1LL,x); y=min(n,y);
if(x>=y) printf("0\n");
else printf("%d\n",f[x][y]);
}
return ;
}
T4
A SRM 04
描述
给个整数 n,你需要算出这个数在二进制下有多少组连续的 1
输入格式
一个整数 n
输出格式
一个整数,表示连续的 1 的组数
样例输入
5
样例输出
2
数据范围与约定
样例解释
5 在二进制下是 101,组数为 2
这道题就是一波匹配就解决问题了
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
LL read(){
LL ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
LL n,ans;
bool f;
int main()
{
n=read();
while(n){
while((n&)&&n) f=,n>>=;
if(f) ans++;
while(!(n&)&&n) n>>=;
}
printf("%lld",ans);
return ;
}
T5
K SRM 04
描述
一个序列满足条件是指其众数在序列中的出现次数不小于 (len 为序列长度)。
给定长度为 n 的序列 A,问 A 中有多少连续子序列满足条件。
输入格式
第一行一个整数 n
第二行 n 个整数
输出格式
一个整数,表示满足条件的连续子序列数。
样例输入
7
1 2 3 3 2 1 3
样例输出
11
数据范围与约定
样例解释
在样例中满足条件的连续子序列有:A[1...1]、A[2...2]、A[3...3]、A[4...4]、A[5...5]、A[6...6]、A[7...7]、A[3...4]、A[2...4]、A[3...5]、A[3...7]。
这道题我用了离散化每个数的值来实现桶排然后就枚举区间 每次加一个数就更新一波众数就可以啦
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
const int mod=;
using namespace std;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n;
int v[];
int first[mod],sum[];
LL ans,cnt;
struct node{int v,next;}e[];
int get(int x){
int w=x%mod;
for(int i=first[w];i;i=e[i].next) if(e[i].v==x) return i;
cnt++; e[cnt].v=x; e[cnt].next=first[w]; first[w]=cnt;
return cnt;
}
int main()
{
n=read();
for(int i=;i<=n;i++) v[i]=read();
for(int i=;i<=n;i++){
int k,mx=;
memset(sum,,sizeof(sum));
for(int j=i;j<=n;j++){
k=get(v[j]); sum[k]++;
mx=max(mx,sum[k]);
if(mx>(j-i+)/) ans++;
}
}
printf("%lld\n",ans);
return ;
}
到这里这次比赛就圆满了(写完脑(nai)子疼) 这次也算发挥得不错吧 下次还是得被唐神葱神以及岚清大爷踩啊......祝我好运吧.
金山中学 rugular SRM 04 ——纪念我的第一次Ak的更多相关文章
- ContestHunter暑假欢乐赛 SRM 04
逃了一场SRM(躺 A题可以看成0点到1点,有p的几率从0到1,1-p几率不动,求0到1的期望步数.很显然概率是不降序列数/n!,然后列个方程E[0] = E[0] * (1 - p) + 1,解得E ...
- 纪念第一次ak。。。
1.MM的数学作业 [题目大意] 今天,MM在上数学课,数学课的主题是函数.讲完以后老师留了一个家庭作业,让同学们回家思考.题目如下: 定义一个函数,F(x)表示x转成二进制后,二进制中“1”的个数. ...
- 纪念又一次ak
t1网络流 随便建个图就可以了 t2单调队列 分成两组来做 t3dp+高精度 为了不被卡厂用了万进制
- Win10+Ubuntu16.04双系统安装过程中遇到的一些问题及解决办法
前两天闲来无聊重装了系统,装的是win10 64的系统,后来心血来潮索性再装Ubuntu,搞成win10+Ubuntu双系统. win10系统的镜像文件可以通过MSDN网站获取,MSDN是一个很可靠的 ...
- JS+MySQL获取 京东 省市区 地区
采集了一下JD的省市区地区 (非常简单,只是做个记录) 1.建表:account_area 2.进入页面: https://reg.jd.com/reg/company 在浏览器(Firefox) ...
- maven配置
java 环境变理 http://jingyan.baidu.com/article/f96699bb8b38e0894e3c1bef.html maven环境变理 http://www.cnblog ...
- 1006. Sign In and Sign Out (25)
At the beginning of every day, the first person who signs in the computer room will unlock the door, ...
- COM学习(三)——数据类型
上回书介绍了GUID.CLSID.IID和接口的概念.本回的重点是介绍 COM 中的数据类型.咋还不介绍组件程序的设计步骤呀?咳......别着急,别着急!孔子曰:"饭要一口一口地吃&quo ...
- 转:VmWare下安装CentOS6图文安装教程
文章来自于:http://www.cnblogs.com/seesea125/archive/2012/02/25/2368255.html 查看文章索引请通过http://www.cnblogs.c ...
随机推荐
- 小白学习mysql 之 innodb locks
Innodb 锁类型: Shared and Exclusive Locks Intention Locks Record Locks Gap Locks Next-Key Locks Insert ...
- C++学习013多态
何为多态 面向对象最要的特征之一就是多态,而纯虚函数是实现多态的主要方式.它可以提供一个通过用的接口,同样调用一个方法, 由于运算对象不同,方法也不同,这也就是所谓的动态绑定. #include &l ...
- appium + Python + iOS 滑屏方法(appium版本大于1.5)
之前一直在搞android的自动化,滑动操作一直都用swipe(),比如: he1 = int(dr.get_window_size()['height'] * 0.8)he2 = int(dr.ge ...
- CCF-NOIP-2018 提高组(复赛) 模拟试题(三)
T1 取球游戏 问题描述 现有\(N\)个小球,依次编号为\(1\)到\(N\),这些小球除了编号以外没有任何区别.从这\(N\)个小球中取出\(M\)个,请问有多少种取球方案使得在取出的\(M\)个 ...
- ubuntu12.04停留在grub界面问题
修改ubuntu 12.04 停留在grub界面的步骤: 1. 在/etc/default/grub配置文件中, 添加一项GRUB_RECORDFAIL_TIMEOUT: GRUB_TIMEOUT=2 ...
- mongodb数据库高级操作
1.创建索引 2.索引名称 3.其他索引 4.explain 5.操作索引 6.高级特性 7.固定集合 8.导入导出 9.上锁 10.添加用户 11.主从复制
- BZOJ 4595 SHOI2015 激光发生器 射线,线段,偏转
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4595 题意概述: 给出一条射线和N条线段,射线遇到线段会发生反射,令入射角alpha,出射 ...
- 团队项目-第十次scrum 会议
时间:11.6 时长:20分钟 地点:主235教室走廊 工作情况 团队成员 已完成任务 待完成任务 解小锐 完成多种招聘方式的逻辑编写 陈鑫 实现游戏的存档功能 李金奇 添加多种招聘方式等功能 王辰昱 ...
- JavaWeb 基于Session的用户登陆注销实现
通过Session来存储用户的部分登陆信息来验证用户是否在线,这应该时最容易实现的一种Web端方案,本文以SSM(Spring.SpringMVC.myBatis)框架为载体,来具体实现这套登陆系统. ...
- SQL SERVER 查询语句学习:CHARINDEX
场景介绍 项目A需要一个批量删除的功能,之前我一直用SqlTransaction去处理,今天同事告诉我可以用CHARINDEX函数去解决问题,因此我今天就研究了一下. SQL语句 ---定义要删除的数 ...