虽然只是一场比较简单的比赛 但奈何我也比较弱啊....

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的更多相关文章

  1. ContestHunter暑假欢乐赛 SRM 04

    逃了一场SRM(躺 A题可以看成0点到1点,有p的几率从0到1,1-p几率不动,求0到1的期望步数.很显然概率是不降序列数/n!,然后列个方程E[0] = E[0] * (1 - p) + 1,解得E ...

  2. 纪念第一次ak。。。

    1.MM的数学作业 [题目大意] 今天,MM在上数学课,数学课的主题是函数.讲完以后老师留了一个家庭作业,让同学们回家思考.题目如下: 定义一个函数,F(x)表示x转成二进制后,二进制中“1”的个数. ...

  3. 纪念又一次ak

    t1网络流 随便建个图就可以了 t2单调队列 分成两组来做 t3dp+高精度 为了不被卡厂用了万进制

  4. Win10+Ubuntu16.04双系统安装过程中遇到的一些问题及解决办法

    前两天闲来无聊重装了系统,装的是win10 64的系统,后来心血来潮索性再装Ubuntu,搞成win10+Ubuntu双系统. win10系统的镜像文件可以通过MSDN网站获取,MSDN是一个很可靠的 ...

  5. JS+MySQL获取 京东 省市区 地区

    采集了一下JD的省市区地区 (非常简单,只是做个记录) 1.建表:account_area   2.进入页面: https://reg.jd.com/reg/company 在浏览器(Firefox) ...

  6. maven配置

    java 环境变理 http://jingyan.baidu.com/article/f96699bb8b38e0894e3c1bef.html maven环境变理 http://www.cnblog ...

  7. 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, ...

  8. COM学习(三)——数据类型

    上回书介绍了GUID.CLSID.IID和接口的概念.本回的重点是介绍 COM 中的数据类型.咋还不介绍组件程序的设计步骤呀?咳......别着急,别着急!孔子曰:"饭要一口一口地吃&quo ...

  9. 转:VmWare下安装CentOS6图文安装教程

    文章来自于:http://www.cnblogs.com/seesea125/archive/2012/02/25/2368255.html 查看文章索引请通过http://www.cnblogs.c ...

随机推荐

  1. 2、Java并发编程:如何创建线程

    Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...

  2. hdu4742 Pinball Game 3D

    真他娘的搞不懂cdq分治的顺序问题.但是candy?的博客里提到过,多想想吧-- #include <algorithm> #include <iostream> #inclu ...

  3. Qt 加载Leap motion 手势识别软件 二次开发 hello world

    研发需要对收拾是被进行精确定位,实现收拾的识别,和在虚拟现实中精确的显示手势在实际世界中的位置. 开始使用的Qt mingw的版本开发,总是函数没有定义,最后发现是leap sdk中需要代育vs的库文 ...

  4. 12-Mysql数据库----多表查询

    本节重点: 多表连接查询 符合条件连接查询 子查询 准备工作:准备两张表,部门表(department).员工表(employee) create table department( id int, ...

  5. Spark搭档Elasticsearch

    Spark与elasticsearch结合使用是一种常用的场景,小编在这里整理了一些Spark与ES结合使用的方法.一. write data to elasticsearch利用elasticsea ...

  6. 基于语音转录的ted演讲推荐

    论文地址:https://arxiv.org/abs/1809.05350v1 二.  实现 我们从Kaggle[6]中获取了TED演讲数据集,其中包括2400个TED演讲的数据,包括标题.演讲者.标 ...

  7. visionpro halcon 哪个好

    visionpro halcon 哪个好 很多朋友会问到visionpro和halcon这两款机器视觉软件,到底学哪个好呢,今天众寻网就给大家讲一讲: 首先比较下两者的优缺点: halcon: 提供的 ...

  8. BZOJ 1010 HNOI2008 玩具装箱 斜率优化

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1010 Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的 ...

  9. Java 端口扫描器 TCP的实现方法

    想必很多朋友都实现过一个简易的聊天室这个功能,其中涉及到Socket套接字这个类,我们通过一个特定的IP以及特定的端口创建一个服务端的套接字(ServerSocket),以此我们聊天个体的套接字(So ...

  10. java线程(6)——线程池(下)

    上篇博客java线程(5)--线程池(上)介绍了线程池的基本知识,这篇博客我们介绍一下常用的ThreadPoolExecutor. 定义 类图关系: ThreadPoolExecutor继承了Abst ...