第n+1次考试
题目:
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次考试的更多相关文章
- 全网独家MongoDB Certified DBA Associate考试认证视频
该视频意在让所有学员一次通过考试,避免重复考试而承担的巨额考试费用! 目前MongDB发展迅猛,有赶超mysql,和oracle看齐的苗头.在这个时候MongoDB也适时的推出了官方的认证考试&quo ...
- 记lrd的高二上学期第五次调研考试
河北某某中学的调研考试其实是很好玩的经历呢.可惜没有太多机会了. 背景: NOIP2016回来之后没有好好学文化课-.自习能翘就翘了,衡中特产学案自助没有好好写(说来我好像从来没被老师查到过,上课写学 ...
- 1009: [HNOI2008]GT考试
1009: [HNOI2008]GT考试 Time Limit: 1 Sec Memory Limit: 162 MB Description 阿申准备报名参加GT考试,准考证号为N位数\(X_1X_ ...
- mysql练习题-查询同时参加计算机和英语考试的学生的信息-遁地龙卷风
(-1)写在前面 文章参考http://blog.sina.com.cn/willcaty. 针对其中的一道练习题想出两种其他的答案,希望网友给出更多回答. (0) 基础数据 student表 +-- ...
- js封装用户选项传递给Servlet之考试系统二
<%@ page language="java" import="java.util.*" contentType="text/html; ch ...
- js动态生成选项之考试系统(一)
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...
- 分享一个LiteDB做的简单考试系统辅助工具
凌晨,被安排在公司值班,因为台风“灿鸿”即将登陆,风力太大,办公楼,车间等重要部分需要关注.所以无聊,那就分享一下,今天给朋友临时做的一个小的考试系统辅助工具吧.其实非常小,需求也很简单,但是可以根据 ...
- CCF考试
第八次CCF考试记录 代码还不知道对不对,过两天出成绩. 成绩出来了,310分. 100+100+100+10+0: 考试13:27开始,17:30结束,提交第4题后不再答题,只是检查前四题的代码 第 ...
- PAT 1041. 考试座位号(15)
每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座 ...
- 硕士研究生入学考试复试试卷答案.tex
%该模板用于数学答题 \documentclass[UTF8]{ctexart}%[中文编码 UTF8] \usepackage{fancyhdr}%{页眉页脚页码} \pagestyle{fancy ...
随机推荐
- url rewrite导致的500.19 0x8007000d
https://stackoverflow.com/questions/13532447/http-error-500-19-iis-7-5-error-0x8007000d It seems you ...
- .Net Core EF Core之Sqlite使用及部署
1.添加引用Nuget包 Microsoft.EntityFrameworkCore.Sqlite Microsoft.EntityFrameworkCore.Design Microsoft.Ent ...
- UVa 10340 子序列
https://vjudge.net/problem/UVA-10340 题意: 输入两个字符串s和t,判断是否可以从t中删除0个或多个字符得到字符串s. 思路: 很水的题... #include&l ...
- Win10重命名文件夹导致资源管理器卡顿的解决办法
我本机使用的是 Win10 1607,不清楚是因为什么原因导致重命名文件夹时资源管理器会被卡死,找了很长时间终于找到了解决办法,现在我把步骤粘出来以便后续遇到相同问题的朋友能及时解决. 其实操作很简单 ...
- google nmt 实验踩坑记录
最近因为要做一个title压缩的任务,所以调研了一些text summary的方法. text summary 一般分为抽取式和生成式两种.前者一般是从原始的文本中抽取出重要的word o ...
- go 并发
package main import ( "fmt" "time" ) func say(s string) { ; i < ; i++ { time. ...
- 将正在使用的Ubuntu14.04 制作成镜像文件
remastersys 是一个能够备份你的ubuntu系统的工具. 源码在github上能找到:Remastersys Source 可以直接 apt 安装: sudo add-apt-reposit ...
- ubuntu 常用设置
●1 问题:使用virt-manager创建虚拟机时,Virtual network 'default':NAT(Inactive) 解决方法:1,查看网络状态sudo virsh net-list ...
- windows7 桌面突然卡住了,点击右键点不了,点击桌面软件点不了,怎么办?
关闭并重启explorer.exe进程命令操作 :1. cmd 2. taskkill /f /im explorer.exe && start explorer.exe
- Codeforces 847C - Sum of Nestings
847C - Sum of Nestings 思路:简单的递归. 代码: #include<bits/stdc++.h> using namespace std; #define ll l ...