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

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. kill -9 vs killall

    kill Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后 ...

  2. Lambda方式左连接有Linq方式左连接

    网上查到的直接使用Join+DefaultIfEmpty的方式是错误的,实际生成SQL是两表先内联接,然后再LEFT JOIN.经过查证,参考资料,最终得到如下两种方式的左连接写法: public v ...

  3. html5判断设备的动作

    相应的事件 deviceorientation事件提供设备的物理方向信息,表示为一系列本地坐标系的旋角. devicemotion事件提供设备的加速信息,表示为定义在设备上的坐标系中的卡尔迪坐标.其还 ...

  4. github简单使用教程(转)

    github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开.对于一般人来说公共仓库就已经足够了,而且我们也没多少代码来管理,O(∩_∩)O ...

  5. Navicat oracle to postgresql ERR

    可能的解决思路是设好源数据和目标数据库后,先建立表结构,然后修改表结构字段数据类型 参考 https://www.cnblogs.com/stephen-liu74/archive/2012/04/3 ...

  6. 转型、java基础之Java变量命名规范 (转载)

    向上转型:基类引用指向导出类(派生类)的对象(实例)向下转型:导出类的引用指向基类的对象(实例)  重点:向下转型只有将该引用的导出类的向上转型后向下转型,运行时才不会报错 Java是一种区分字母的大 ...

  7. eclipse mylyn.tasks.ui

    sudo rm workspace/.metadata/.lock ./Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse -clean - ...

  8. Top K 算法详解

    http://xingyunbaijunwei.blog.163.com/blog/static/7653806720111149318357/ 问题描述         百度面试题:        ...

  9. Resources for Browser/Webkit/GPU

    Tali Garsiel's site: http://taligarsiel.com/ Webkit Main Flow Chromium Project: http://www.chromium. ...

  10. WCF身份验证三:自定义身份验证之<MessageHeader>

    关于使用SoadHeader验证Robin已经有一篇十分精彩的文章: WCF进阶:为每个操作附加身份信息, 不过我的思维方式总是跟别人有点不太一样, 还是把类似的内容用我的方式重新组织一下. 使用He ...