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)题,经过他们优( ...
随机推荐
- 201621123057 《Java程序设计》第3周学习总结
1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识点组织起来.请使用工具画出本周学习到的知识点及知识点之间的联系.步骤如下: 1.1 写出你 ...
- 15-TypeScript策略模式
在前面的简单工厂模式中,通常将每个类.接口定义到不同的文件中.在面向对象开发思想中有一个重要的原则就是封装变化点,在实际操作过程中, 通常被调用方的代码不要去更改,而是增加,这是面向对象的开闭原则.在 ...
- CSS揭秘(三)形状
Chapter 3 1. 椭圆 椭圆的实现主要依靠 border-radius 属性,该属性确定边框切圆角的半径大小,可以指定数值 px,也可以使用百分比显示 而且该属性非常灵活,四个角可以分别设置 ...
- php类中的$this,static,const,self这几个关键字使用方法
本篇文章主要分享一下关于php类中的$this,static,final,const,self这几个关键字使用方法 $this $this表示当前实例,在类的内部方法访问未声明为const及stati ...
- Python内置函数(40)——dir
英文文档: dir([object]) Without arguments, return the list of names in the current local scope. With an ...
- tomca配置文件自动还原问题的解决 server.xml content.xml 等
当我们在处理中文乱码或是配置数据源时,我们要修改Tomcat下的server.xml和content.xml文件. 但是当我们修改完后重启Tomcat服务器时发现xml文件又被还原了,修改无效果. 为 ...
- python入门(3)python的解释器
python入门(3)python的解释器 Python写的程序是以.py为扩展名的文本文件.要运行代码,就需要Python解释器去执行.py文件. 由于整个Python语言从规范到解释器都是开源的, ...
- python实现:最长子字符串
给定一个字符串 s 和正整数 n,请使用你熟悉的编程语言输出 s 中包含不超过 n 种字符的最长子串,如 s="uabbcadbaef",n=4 时应该输出 "abbca ...
- 【Java】0X003 面向对象
一. 什么是面向对象 都说Java是一门面向对象的语言,但什么对象?什么又是面向对象?以下都是我学到的知识和一点自己的理解. 对象是指包含属性和行为的主体. 比如,人有性别.血型.单眼皮或双眼皮等的特 ...
- highchart
highchart 1 2 #下载 https://www.highcharts.com/download a. 简单例子 <!DOCTYPE html> <html lang=&q ...