题目:

1. 中位数

【问题描述】

给定C个不同物品,每个物品有一重量和体积,保证每个物品的重量不一样。从中选出N个物品,在体积不超过F的情况下,使得选出的物品的重量的中位数最大。所谓中位数,就是排序后处在最中间的重量,比如3,8,9,7,5的中位数是7。

【输入格式】

第一行:三个用空格分开的整数:N,C和F。1 ≤ N ≤ 19999,N ≤ C ≤ 105

,0 ≤ F ≤ 2 × 109

第二行到C + 1行:每行有两个用空格分开的整数。第一个数是这个物品的重量Wi,第二个数是这个物品的体积Qi。

【输出格式】

第一行:一个整数,表示可以得到的最大中位数,如果F装不下任何N个物品,则输出-1。

【输入样例】

3 5 70

30 25

50 21

20 20

5 18

35 30

【输出样例】

35

【样例解释】

选择重量为 5, 35, 50 的物品,中位数为 35,体积18 + 30 + 21 = 69,小于70。

【数据范围】

40%的数据,1 ≤ N≤ C ≤200

100%的数据,1 ≤ N ≤ 19999,N ≤ C ≤ 105,0 ≤ F ≤ 2 × 109,0 ≤ Qi≤ 105,0 ≤ Wi≤ 2 × 109。保证n为奇数。

2. 爆炸

【问题描述】

有N个城市,M条双向道路组成的地图,城市标号为1到N。“西瓜炸弹”放在1号城市,保证城市1至少连接着一个其他城市。“西瓜炸弹”有P/Q的概率会爆炸,每次进入其它城市时,爆炸的概率相同。如果它没有爆炸,它会随机的选择一条道路到另一个城市去,对于当前城市所连接的每一条道路都有相同的可能性被选中。对于给定的地图,求每个城市“西瓜炸弹”爆炸的概率。

例如,假设只有两个城市1和2,它们被一条道路连接起来。最开始“西瓜炸弹”放在城市1,每次进入城市它都有1/2的可能性爆炸:

1 — 2

我们就有以下可能的路径(其中最后一项是结束城市,即“西瓜炸弹”爆炸并污染该城市):

1: 1 
2: 1-2 
3: 1-2-1 
4: 1-2-1-2 
5: 1-2-1-2-1 
etc.

为了找出“西瓜炸弹”在城市1爆炸的可能性,我们可以把第1、3、5…种路径出现的概率加起来(在这个例子中即把所有奇数路径出现的可能性加起来)。 
对于第k种路径出现的可能性为(1/2)^k:在经过前k-1次时,炸弹绝对不会在城市1爆炸(每一次的概率为1 – 1/2 = 1/2),然后最后在城市1爆炸(概率为1/2)。

因此,在城市1爆炸的可能性就是 1/2 + (1/2)^3 + (1/2)^5 + … ,把这些数都加起来就等于2 / 3,约为0.666666667。 
所以在城市2爆炸的可能性就是1/3,约为0.333333333。

【输入格式】

第1行:四个被空格分隔整数:N,M,P和Q

第2..M+1行:第i行描述了两个空格分隔的整数:A_j 和 B_j(表示城市A_j与B_j相连)

【输出格式】

第1..N行:第i行为一个小数,表示第i个城市 “西瓜炸弹”爆炸的概率。至少要精确到10^-6才有效。

【输入样例1】

2 1 1 2 
1 2

【输出样例1】

0.666666667 
0.333333333

【输入样例2】

3 2 1 3

1 2

3 2

【输出样例2】

0.466666667

0.400000000

0.133333333

【数据范围】

20%  2<=N<=25 , 1<=M<=100

100% 2 <= N <= 300 ,1 <= M <= 44850 ,1 <= P <= 1,000,000,1 <= Q <= 1,000,000

3.序列划分

【题目描述】

给定一个序列{An},现在,需要把这个序列划分成K个子序列,使得每个子序列包含的数的个数不少于2,并且要么非升,要么非降。你的任务就是求出K的最小值。

【输入文件】

输入第一行一个正整数N,表示序列长度,接下来N行,第i行表示元素Ai-1

【输出文件】

如果不能划分这个序列,输出一个数0;否则输出K。

【样例输入1】

6

12

33

97

18

15

33

【样例输出1】

2

【样例输入2】

1

88

【样例输出2】

0

【样例输入3】

4

77

22

22

11

【样例输出3】

1

【数据规模】

对于30%的数据,1<=N<=10;

对于100%的数据,1<=N<=25,1<=Ai<=100;

题解:

一:按照体积排序

1.预处理前i小、大的体积的物品的重量拿n/2个的最小重量

然后一个个枚举过去,看看是否成立

至于预处理就用一个堆好了

二:高斯消元+概率dp

本来想要简单的dp+收敛,没有想到数据那么坑。。。

(其实按照随机的概率大概可以过p/q>0.02的情况吧)

正解:高斯校园+概率

列出n个方程,解n个数字,就是高斯消元

三:迭代深搜

枚举有多少个可以,然后按照类似与导弹拦截的贪心方法做贪心

代码:

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=;
int f[N],d[N],l,a[N],b[N],n,m,F;
long long f1[N],f2[N];
void up(int x)
{
if (x==)return;
if (d[x]>d[x/])
{
swap(d[x],d[x/]);
up(x/);
}
}
void down(int x)
{
int i=x;
if (x*<=l&&d[x]<d[x*])i=x*;
if (x*<l&&d[i]<d[x*+])i=x*+;
if (i!=x)
{
swap(d[x],d[i]);
down(i);
}
}
int cmp(int x,int y)
{
return a[x]<a[y];
}
int main()
{
freopen("finance.in","r",stdin);
freopen("finance.out","w",stdout);
scanf("%d%d%d",&n,&m,&F);
for (int i=;i<=m;i++)scanf("%d%d",&a[i],&b[i]),f[i]=i;
sort(f+,f+m+,cmp);
for (int i=;i<=n/;i++)d[i]=b[f[i]],f1[i]=f1[i-]+b[f[i]];
l=n/;
for (int i=;i<=n/;i++)up(i);
for (int i=n/+;i<=m;i++)
{
if (b[f[i]]>=d[])
{
f1[i]=f1[i-];
continue;
}
f1[i]=f1[i-]+b[f[i]]-d[];
d[]=b[f[i]];
down();
}
memset(d,,sizeof d);
for (int i=m;i>m-n/;i--)d[m-i+]=b[f[i]],f2[i]=f2[i+]+b[f[i]];
for (int i=;i<=n/;i++)up(i);
for (int i=m-n/;i;i--)
{
if (b[f[i]]>=d[])
{
f2[i]=f2[i+];
continue;
}
f2[i]=f2[i+]+b[f[i]]-d[];
d[]=b[f[i]];
down();
}
for (int i=m-n/;i>n/;i--)
if (F>=f1[i-]+f2[i+]+b[f[i]])
{
printf("%d",a[f[i]]);
return ;
}
puts("-1");
return ;
}
#include <bits/stdc++.h>
using namespace std;
typedef double ld;
const int N=;
const ld eps=1e-;
int n,m,mp[N][N],du[N];
ld f[N][N],sum,P,Q;
int main()
{
freopen("dotp.in","r",stdin);
freopen("dotp.out","w",stdout);
scanf("%d%d%lf%lf",&n,&m,&P,&Q);
for(int i=,x,y;i<=m;i++)
{
scanf("%d%d",&x,&y);
mp[x][y]++;mp[y][x]++;
du[x]++;du[y]++;
}
f[][n+]=;
for(int i=;i<=n;i++)
{
f[i][i]=;
for(int j=;j<=n;j++)
if(mp[i][j])f[i][j]+=((ld)P/Q-)/du[j]*mp[i][j];
}
for(int i=;i<=n;i++)
{
int t=i;
for(int j=i;j<=n;j++)
if(fabs(f[j][i])>eps)t=j;
for(int j=;j<=n+;j++)swap(f[i][j],f[t][j]);
for(int j=;j<=n;j++)
if(j!=i&&fabs(f[j][i])>eps)
{
ld t=f[j][i]/f[i][i];
for(int k=;k<=n+;k++)f[j][k]-=f[i][k]*t;
}
}
for(int i=;i<=n;i++)sum+=(f[i][i]=f[i][n+]/f[i][i]);
for(int i=;i<=n;i++)printf("%.9lf\n",(double)(f[i][i]/sum+eps));
return ;
}
#include<bits/stdc++.h>
using namespace std;
const int N=;
int a[N][N],b[N][N],A,B,ans[N],x[N],dep,n;
void DFS(int u)
{
if (A+B>dep)return;
if (u>n)
{
for (int i=;i<=A;i++)
if (*a[i]<)return;
for (int i=;i<=B;i++)
if (*b[i]<)return;
printf("%d\n",dep);
exit();
}
int v=;
for (int i=;i<=A;i++)
if (a[i][*a[i]]<=x[u]&&(!v||a[v][*a[v]]<a[i][*a[i]]))v=i;
if (!v)
{
++A;
a[A][++*a[A]]=x[u];
ans[u]=A;
DFS(u+);
--*a[A--];
}
else
{
a[v][++*a[v]]=x[u];
ans[u]=v;
DFS(u+);
--*a[v];
}
v=;
for (int i=;i<=B;i++)
if (b[i][*b[i]]>=x[u]&&(!v||b[v][*b[v]]>b[i][*b[i]]))v=i;
if (!v)
{
++B;
b[B][++*b[B]]=x[u];
ans[u]=dep+-B;
DFS(u+);
--*b[B--];
}
else
{
b[v][++*b[v]]=x[u];
ans[u]=dep+-v;
DFS(u+);
--*b[v];
}
}
int main()
{
freopen("sequence.in","r",stdin);
freopen("sequence.out","w",stdout);
scanf("%d",&n);
for (int i=;i<=n;i++)scanf("%d",&x[i]);
for (dep=;dep*<=n;dep++)
{
memset(a,,sizeof a);
memset(b,,sizeof b);
A=B=;
DFS();
}
puts("");
return ;
}

第n+1次考试的更多相关文章

  1. 全网独家MongoDB Certified DBA Associate考试认证视频

    该视频意在让所有学员一次通过考试,避免重复考试而承担的巨额考试费用! 目前MongDB发展迅猛,有赶超mysql,和oracle看齐的苗头.在这个时候MongoDB也适时的推出了官方的认证考试&quo ...

  2. 记lrd的高二上学期第五次调研考试

    河北某某中学的调研考试其实是很好玩的经历呢.可惜没有太多机会了. 背景: NOIP2016回来之后没有好好学文化课-.自习能翘就翘了,衡中特产学案自助没有好好写(说来我好像从来没被老师查到过,上课写学 ...

  3. 1009: [HNOI2008]GT考试

    1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MB Description 阿申准备报名参加GT考试,准考证号为N位数\(X_1X_ ...

  4. mysql练习题-查询同时参加计算机和英语考试的学生的信息-遁地龙卷风

    (-1)写在前面 文章参考http://blog.sina.com.cn/willcaty. 针对其中的一道练习题想出两种其他的答案,希望网友给出更多回答. (0) 基础数据 student表 +-- ...

  5. js封装用户选项传递给Servlet之考试系统二

    <%@ page language="java" import="java.util.*" contentType="text/html; ch ...

  6. js动态生成选项之考试系统(一)

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  7. 分享一个LiteDB做的简单考试系统辅助工具

    凌晨,被安排在公司值班,因为台风“灿鸿”即将登陆,风力太大,办公楼,车间等重要部分需要关注.所以无聊,那就分享一下,今天给朋友临时做的一个小的考试系统辅助工具吧.其实非常小,需求也很简单,但是可以根据 ...

  8. CCF考试

    第八次CCF考试记录 代码还不知道对不对,过两天出成绩. 成绩出来了,310分. 100+100+100+10+0: 考试13:27开始,17:30结束,提交第4题后不再答题,只是检查前四题的代码 第 ...

  9. PAT 1041. 考试座位号(15)

    每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座 ...

  10. 硕士研究生入学考试复试试卷答案.tex

    %该模板用于数学答题 \documentclass[UTF8]{ctexart}%[中文编码 UTF8] \usepackage{fancyhdr}%{页眉页脚页码} \pagestyle{fancy ...

随机推荐

  1. keil5配置stm32库函数开发

    在将模板文件添加到工程中后, 1.点击魔术棒,选择C/C++,添加头文件的路径: 2.C/C++里面的define内填入:STM32F10X_MD,USE_STDPERIPH_DRIVER: 3.Ou ...

  2. 【前端】javascript+jquery实现手风琴式的滚动banner或产品展示图

    实现效果 实现步骤 // 鼠标放入到li中该盒子变宽,其他盒子变窄,鼠标移开大盒子,恢复原样 // 实现步骤 // 1. 给li添加背景 // 2. 绑定onmouseover事件,鼠标放入到li中, ...

  3. Python3基础 try-except-finally 的简单示例

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  4. Python3基础 input 输入浮点数,整数,字符串

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  5. Sizeof与Strlen的区别【转】

    本文转载自:http://www.cnblogs.com/carekee/articles/1630789.html Sizeof与Strlen的区别与联系 一.sizeof    sizeof(.. ...

  6. arm linux利用alsa驱动并使用usb音频设备

    一.背景: arm linux的内核版本是3.13.0 二.准备工作 添加alsa驱动到内核中,也就是在编译内核的时候加入以下选项: 接下来就重新编译内核即可 三.交叉编译alsa-lib和alsa- ...

  7. POJ 2029 (二维树状数组)题解

    思路: 大力出奇迹,先用二维树状数组存,然后暴力枚举 算某个矩形区域的值的示意图如下,代码在下面慢慢找... 代码: #include<cstdio> #include<map> ...

  8. HDU1698 Just a Hook(线段树&区间覆盖)题解

    Problem Description In the game of DotA, Pudge’s meat hook is actually the most horrible thing for m ...

  9. POJ 3630 Phone List(字符串前缀重复)题解

    Description Given a list of phone numbers, determine if it is consistent in the sense that no number ...

  10. Large Division(大数)题解

    Given two integers, a and b, you should check whether a is divisible by b or not. We know that an in ...