NOIP2014-7-7模拟赛
1.无线通讯网(wireless.pas/cpp/c)
【题目描述】
国防部计划用无线网络连接若干个边防哨所。2种不同的通讯技术用来搭建无线网络;每个边防哨所都要配备无线电收发器;有一些哨所还可以增配卫星电话。
任意两个配备了一条卫星电话线路的哨所(两边都拥有卫星电话)均可以通话,无论他们相距多远。而只通过无线电收发器通话的哨所之间的距离不能超过D,这是受收发器的功率限制。收发器的功率越高,通话距离D会更远,但同时价格也会更贵。
收发器需要统一购买和安装,所以全部哨所只能选择安装一种型号的收发器。换句话说,每一对哨所之间的通话距离都是同一个D。
你的任务是确定收发器必须的最小通话距离D,使得每一对哨所之间至少有一条通话路径(直接的或者间接的)。
【输入格式】 wireless.in
第1行:2个整数S(1<=S<=100)和P(S<P<=500),S表示可安装的卫星电话的哨所数,P表示边防哨所的数量。
接下里P行,每行描述一个哨所的平面坐标(x,y),以km为单位,整数,0<=x,y<=10000。
【输出格式】 wireless.out
第1行:1个实数D,表示无线电收发器的最小传输距离。精确到小数点后两位。
【样例输入】
2 4
0 100
0 300
0 600
150 750
【样例输出】
212.13
数据范围
对于20%的数据 P=2,S=1
对于另外20%的数据 P=4,S=2
对于100%的数据 1<=S<=100,S<P<=500
2.混合图(dizzy.pas/cpp/c)
【题目描述】
Hzwer神犇最近又征服了一个国家,然后接下来却也遇见了一个难题。
Hzwer的国家有n个点,m条边,而作为国王,他十分喜欢游览自己的国家。他一般会从任意一个点出发,随便找边走,沿途欣赏路上的美景。但是我们的Hzwer是一个奇怪的人,他不喜欢走到自己以前走过的地方,他的国家本来有p1条有向边,p2条无向边,由于国王奇怪的爱好,他觉得整改所有无向边,使得他们变成有向边,要求整改完以后保证他的国家不可能出现从某个地点出发顺着路走一圈又回来的情况。(注:m=p1+p2.)
概述:给你一张混合图,要求你为无向图定向,使得图上没有环。
【输入格式】 dizzy.in
第一行3个整数 n,p1,p2,分别表示点数,有向边的数量,无向边的数量。
第二行起输入p1行,每行2个整数 a,b 表示a到b有一条有向边。
接下来输入p2行,每行2个整数 a,b 表示a和b中间有一条无向边。
【输出格式】 dizzy.out
对于每条无向边,我们要求按输入顺序输出你定向的结果,也就是如果你输出a b,那表示你将a和b中间的无向边定向为a->b。
注意,也许存在很多可行的解。你只要输出其中任意一个就好。
【样例输入】
4 2 3
1 2
4 3
1 3
4 2
3 2
【样例输出】
1 3
4 2
2 3
数据范围
对于20%的数据 n<=10 p1<=10 p2<=5
对于30%的数据 n<=10 p1<=30 p2<=20
对于100%的数据 n<=100000 p1<=100000 p2<=100000
数据保证至少有一种可行解。
3.小K的农场(farm.pas/cpp/c)
【题目描述】
小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三种形式描述:农场a比农场b至少多种植了c个单位的作物,农场a比农场b至多多种植了c个单位的作物,农场a与农场b种植的作物数一样多。但是,由于小K的记忆有些偏差,所以他想要知道存不存在一种情况,使得农场的种植作物数量与他记忆中的所有信息吻合。
【输入格式】 farm.in
第一行包括两个整数n和m,分别表示农场数目和小K记忆中的信息数目。
接下来m行:
如果每行的第一个数是1,接下来有3个整数a,b,c,表示农场a比农场b至少多种植了c个单位的作物。
如果每行的第一个数是2,接下来有3个整数a,b,c,表示农场a比农场b至多多种植了c个单位的作物。
如果每行第一个数是3,家下来有2个整数a,b,表示农场a终止的数量和b一样多。
【输出格式】 farm.out
如果存在某种情况与小K的记忆吻合,输出“Yes”,否则输出“No”。
【样例输入】
3 3
3 1 2
1 1 3 1
2 2 3 2
【样例输出】
Yes
样例解释:三个农场种植数量可以为(2,2,1)。
对于100%的数据 1<=n,m,a,b,c<=10000.
T1:
最小生成树or二分并查集
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<vector>
#include<cmath>
#define MAXN 505
using namespace std;
struct Point{
double X,Y;
};
int S,V;
double d[MAXN][MAXN];
vector<double> s;
Point p[MAXN];
int f[MAXN];
int find(int x){
return (f[x]==x)?x:(f[x]=find(f[x]));
}
void lik(int x,int y){
x=find(x),y=find(y);
if(x!=y){
f[x]=y;
}
}
bool check(double c){
for(int i=;i<=V;i++){
f[i]=i;
}
for(int i=;i<=V;i++){
for(int j=i+;j<=V;j++){
if(d[i][j]<=c){
lik(i,j);
}
}
}
int b[MAXN]={};
int cnt=;
for(int i=;i<=V;i++){
int x=find(i);
if(!b[x]){
b[x]=;
cnt++;
}
}
return (cnt<=S);
}
int main()
{
// freopen("data.in","r",stdin);
scanf("%d%d",&S,&V);
for(int i=;i<=V;i++){
scanf("%lf%lf",&p[i].X,&p[i].Y);
}
for(int i=;i<=V;i++){
for(int j=i+;j<=V;j++){
double x1=p[i].X,y1=p[i].Y;
double x2=p[j].X,y2=p[j].Y;
d[i][j]=d[j][i]=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
s.push_back(d[i][j]);
}
}
sort(s.begin(),s.end());
int L=,R=s.size()-;
while(R-L>){
int mid=(L+R)/;
double c=s[mid];
if(check(c)){
R=mid;
}
else{
L=mid+;
}
}
if(check(s[L]))
printf("%.2f\n",s[L]);
else
printf("%.2f\n",s[R]);
return ;
}
Code1-1
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<cmath>
#define MAXN 505
using namespace std;
struct Edge{
int x,y;
double Val;
Edge(int p1=,int p2=,double p3=){
x=p1,y=p2,Val=p3;
}
friend bool operator < (const Edge &p1,const Edge &p2){
return (p1.Val<p2.Val);
}
};
int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if('-'==ch)f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int s,n,cnt;
Edge p[MAXN*MAXN];
int X[MAXN],Y[MAXN];
int f[MAXN];
double dist(int a,int b){
double x1=X[a],y1=Y[a];
double x2=X[b],y2=Y[b];
return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
}
int find(int x){
return (f[x]==x)?x:(f[x]=find(f[x]));
}
int main()
{
// freopen("data.in","r",stdin);
s=read();n=read();
for(int i=;i<=n;i++){
f[i]=i;
}
for(int i=;i<=n;i++){
X[i]=read();
Y[i]=read();
}
for(int i=;i<=n;i++){
for(int j=i+;j<=n;j++){
p[++cnt]=Edge(i,j,dist(i,j));
}
}
sort(p+,p+cnt+);
int t=;
int i;
for(i=;i<=cnt;i++){
int x=p[i].x,y=p[i].y;
x=find(x),y=find(y);
if(x!=y){
f[x]=y; t++;
}
if(t+s==n){
break;
}
}
printf("%.2f\n",p[i].Val);
return ;
}
Code1-2
T2:
拓扑排序
//尚未测评(SJ)
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<vector>
#define MAXN 100005
using namespace std;
int n,p1,p2;
int first1[MAXN],Next1[MAXN],to1[MAXN],cnt1;
int degree[MAXN];
int b[MAXN];
vector<int> vs;
int pre[MAXN];
void Add1(int x,int y){
Next1[++cnt1]=first1[x];first1[x]=cnt1;to1[cnt1]=y;
}
int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if('-'==ch)f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
void dfs(int x){
b[x]=;
vs.push_back(x);
for(int e=first1[x];e;e=Next1[e]){
int y=to1[e];
if(!b[y]){
dfs(y);
}
}
}
int main()
{
// freopen("data.in","r",stdin);
n=read();p1=read();p2=read();
for(int i=;i<=p1;i++){
int x,y;
x=read();y=read();
Add1(x,y);
degree[y]++;
}
for(int i=;i<=n;i++){
if(!degree[i]){
dfs(i);
}
}
for(int i=;i<vs.size();i++){
int x=vs[i];
pre[x]=i;
}
for(int i=;i<=p2;i++){
int x,y;
x=read();y=read();
if(pre[x]<pre[y]){
printf("%d %d\n",x,y);
}
else{
printf("%d %d\n",y,x);
}
}
return ;
}
Code2
T3:
差分+正环判断
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define MAXN 10005
using namespace std;
int first[MAXN],Next[MAXN*],to[MAXN*],Val[MAXN*],cnt;
int n,m;
int b[MAXN],d[MAXN];
void Add(int x,int y,int w){
Next[++cnt]=first[x];first[x]=cnt;to[cnt]=y;Val[cnt]=w;
}
int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if('-'==ch)f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int SPFA(int x){
if(b[x]){
return ;
}
b[x]=;
for(int e=first[x];e;e=Next[e]){
int y=to[e],w=Val[e];
if(d[y]<d[x]+w){
d[y]=d[x]+w;
if(SPFA(y))
return ;
}
}
b[x]=;
return ;
}
int main()
{
// freopen("data.in","r",stdin);
n=read();
m=read();
for(int i=;i<=m;i++){
int p=read();
if(==p){
int x=read(),y=read(),w=read();
Add(x,y,w);
}
else if(==p){
int x=read(),y=read(),w=read();
Add(y,x,-w);
}
else{
int x=read(),y=read();
Add(x,y,);
Add(y,x,);
}
}
for(int i=;i<=n;i++){
memset(d,,sizeof(d));
if(SPFA(i)){
printf("No\n");
return ;
}
}
printf("Yes\n");
return ;
}
Code3
NOIP2014-7-7模拟赛的更多相关文章
- 2014-9-13 NOIP模拟赛
NOIP2014模拟赛 ——lwher 题目名 环上的游戏 舞蹈课 数位和乘积 源文件 cycle.cpp/c/pas dancingLessons.pas/cpp digit.cpp.cpp/c/p ...
- 2014-10-23 NOIP模拟赛
NOIP2014模拟赛 -----lwher 时限均为1s,内存 256MB 1.Jams倒酒(pour) Jams是一家酒吧的老板,他的酒吧提供2种体积的啤酒,a ml 和 b ml,分别使用容积为 ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- NOI模拟赛 Day1
[考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...
- NOIP第7场模拟赛题解
NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 小奇模拟赛9.13 by hzwer
2015年9月13日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿(explo) [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞 ...
- PKUSC 模拟赛 day1 下午总结
下午到了机房之后又困又饿,还要被强行摁着看英文题,简直差评 第一题是NOIP模拟赛的原题,随便模拟就好啦 本人模拟功力太渣不小心打错了个变量,居然调了40多分钟QAQ #include<cstd ...
- [GRYZ]寒假模拟赛
写在前面 这是首次广饶一中的OIERS自编自导,自出自做(zuo)的模拟赛. 鉴于水平气压比较低,机(wei)智(suo)的WMY/XYD/HYXZC就上网FQ下海找了不少水(fei)题,经过他们优( ...
随机推荐
- 201621123060《JAVA程序设计》第一周学习总结
1.本周学习总结 1.讲述了JAVA的发展史,关于JDK.JRE.JVM的联系和区别 2.JDK是用JAVA开发工具.做项目的关键.JRE是JAVA的运行环境(JAVA也是JAVA语言开发的).JVM ...
- MySQL 服务安装及命令使用
MySQL 服务安装及命令使用 课程来源说明 本节实验后续至第17节实验为本课程的进阶篇,都基于 MySQL 官方参考手册制作,并根据实验楼环境进行测试调整改编.在此感谢 MySQL 的开发者,官方文 ...
- Flask 扩展 HTTP认证
Restful API不保存状态,无法依赖Cookie及Session来保存用户信息,自然也无法使用Flask-Login扩展来实现用户认证.所以这里,我们就要介绍另一个扩展,Flask-HTTPAu ...
- lamp环境搭建经验总结
环境:centos6.4,13个源码包:参考教程高罗峰细说php思路:1.首先确定gcc,g++的安装,因为这是c语言的编译工具,没有它,源码不可能安装,redhat的yum需要配置,分为本地源和网络 ...
- idea找不到package下的mapper.xml文件
由于开发人员使用不同的开发工具,导致eclipse的开发人员将mapper.xml文件习惯性的放到package下,以便查看,而eclipse编译时,不会忽略package下的xml以及dtl文件,所 ...
- Spring知识点回顾(01)Java Config
Spring知识点回顾(01) 一.Java Config 1.服务和服务注入 2.Java 注解 :功能更强一些 3.测试验证 二.注解注入 1.服务和服务注入 2.配置加载 3.测试验证 三.总结 ...
- 阿里云API网关(6)用户指南(开放 API )
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- python网络爬虫与信息提取 学习笔记day2
Day2: 查看robots协议: 查看京东的robots协议 查看百度的robots协议,可以看到百度拒绝了搜狗的爬虫233 爬取京东商品页面相关信息: import requests url = ...
- Python之面向对象一
引子 小游戏:人狗大战 角色:人和狗 角色属性:姓名,血量,战斗力和性别(种类) 技能:打/咬 用函数实现人打狗和狗咬人的情形 def Dog(name,blood,aggr,kind): dog = ...
- python开发:python字符串操作方法
name = "my \tname is {name} and i am {year} old" capitalize:第一个单词的首字母大写的方法 print(name.capi ...