第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 ...
随机推荐
- 一种新的技术,C++/CLI
一.来源 在一个项目中,拿到了一个demo,看起来像是C#,又像是C++,部分截图如下 1.界面[C#的winform] 2.mian入口,是cpp 3.解决方案 二.猜测 一开始以为是C#工程,因为 ...
- 分页器的js实现代码 bootstrap Paginator.js
参考: http://www.jb51.net/article/76093.htm 如前所述, 不要什么都想到 jquery的 脚本js, 应该首先推荐的是 css 和 元素本身的事件 函数 如: o ...
- MacBook PRO蓝牙无法搜索设备
背景 经常把MacBook合上盖子就塞进包里,用时打开盖子就继续操作,偶尔会出现刚刚还在用的罗技蓝牙鼠标,重新打开笔记本后就连接不上了,而且也无法搜索到周边的蓝牙设备. 解决方案 快捷键:Option ...
- 【Git安装】centos安装git
1 yum install git 安装后的默认存放地点/usr/bin/git
- [pytorch]pytorch loss function 总结
原文: http://www.voidcn.com/article/p-rtzqgqkz-bpg.html 最近看了下 PyTorch 的损失函数文档,整理了下自己的理解,重新格式化了公式如下,以便以 ...
- 在django restful framework中设置django model的property
众所周知,在django的model中,可以某些字段设置@property和setter deleter getter,这样就可以在存入数据的时候进行一些操作,具体原理请参见廖雪峰大神的博客https ...
- Linux——GRUB简单学习笔记
GRUB的配置文件默认为 :/boot/grub/grub.conf # ls -l /etc/grub.conf GRUB配置选项: default定义缺省启动系统 timeout定义缺省等待时间 ...
- go 接口
1. package main import ( "fmt" ) type Phone interface { call() } type NokiaPhone struct { ...
- python 字符串输出转义{}
>>> print ("{} 对应的位置是 {{0}}".format("runoob")) runoob 对应的位置是 {}
- MongoDB(课时15 数据排序)
3.4.2.10 数据排序 在MongoDB里数据排序操作使用“sort()”函数,在进行排序的时候可以有两个顺序:升序(1),降序(-1). 范例:排序 db.students.find().sor ...