金山中学 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 ...
随机推荐
- FPGA等占空比奇偶分频和半整数分频
1. 偶数分频比较简单,如果分频系数是N(如果N是偶数,那么N/2是整数),那么在输入时钟的每隔N/2个周期时(计数器从0到N/2-1),改变输出时钟的电平即可得到50%固定占空比的时钟.需要的代码如 ...
- I/O Handler的管理(3)
另外连接地址:http://blogs.readthedocs.org/zh_CN/latest/Handler_mgr.html 本章目录 I/O Handler的管理 IO句柄与Select_Re ...
- react实现换肤功能
一.目标 提供几种主题色给用户选择,然后根据用户的选择改变应用的主题色: 二.实现原理 1.准备不同主题色的样式文件: 2.将用户的选择记录在本地缓存中: 3.每次进入应用时,读取缓存 ...
- Visual Studio 2015安装包
点击下载
- 目标检测之Faster-RCNN的pytorch代码详解(模型准备篇)
十月一的假期转眼就结束了,这个假期带女朋友到处玩了玩,虽然经济仿佛要陷入危机,不过没关系,要是吃不上饭就看书,吃精神粮食也不错,哈哈!开个玩笑,是要收收心好好干活了,继续写Faster-RCNN的代码 ...
- HDU 4431 Mahjong(枚举+模拟)(2012 Asia Tianjin Regional Contest)
Problem Description Japanese Mahjong is a four-player game. The game needs four people to sit around ...
- 学习bash——通配符与特殊符号
一.通配符 这是bash操作环境中一个非常有用的功能,这让我们使用bash处理数据就更方便了. 常用通配符如下: 符号 意义 * 代表0个到无穷多个任意字符 ? 代表一个任意字符 [] 代表一定有一个 ...
- J2EE开发实战基础系列之开卷有益
2014.10.24[致歉]{抱歉,从7.4号接到朋友的请求,一直忙到现在,最近又有新的CASE要忙,很抱歉教程要延误,开课时间请大家关注Q群} 时隔七年再次接触培训有关的事情,是兴奋,更多的是恐惧, ...
- JavaScript内置对象常用
Math 提供了数学中常用的属性和方法,使用时直接用Math.属性/方法,而不需要new一个Math对象 Date 使用Date对象来对日期和时间进行操作.使用时,必须用new创建一个实例 windo ...
- AndroidStudio3.0 注解报错Annotation processors must be explicitly declared now. The following dependencies on the compile classpath are found to contain annotation processor.
体验最新版AndroidStudio3.0 Canary 8的时候,发现之前项目的butter knife报错,用到注解的应该都会报错 Error:Execution failed for task ...