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模拟赛的更多相关文章

  1. 2014-9-13 NOIP模拟赛

    NOIP2014模拟赛 ——lwher 题目名 环上的游戏 舞蹈课 数位和乘积 源文件 cycle.cpp/c/pas dancingLessons.pas/cpp digit.cpp.cpp/c/p ...

  2. 2014-10-23 NOIP模拟赛

    NOIP2014模拟赛 -----lwher 时限均为1s,内存 256MB 1.Jams倒酒(pour) Jams是一家酒吧的老板,他的酒吧提供2种体积的啤酒,a ml 和 b ml,分别使用容积为 ...

  3. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  4. NOI模拟赛 Day1

    [考完试不想说话系列] 他们都会做呢QAQ 我毛线也不会呢QAQ 悲伤ING 考试问题: 1.感觉不是很清醒,有点困╯﹏╰ 2.为啥总不按照计划来!!! 3.脑洞在哪里 4.把模拟赛当作真正的比赛,紧 ...

  5. NOIP第7场模拟赛题解

    NOIP模拟赛第7场题解: 题解见:http://www.cqoi.net:2012/JudgeOnline/problemset.php?page=13 题号为2221-2224. 1.car 边界 ...

  6. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  7. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  8. 小奇模拟赛9.13 by hzwer

    2015年9月13日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿(explo) [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞 ...

  9. PKUSC 模拟赛 day1 下午总结

    下午到了机房之后又困又饿,还要被强行摁着看英文题,简直差评 第一题是NOIP模拟赛的原题,随便模拟就好啦 本人模拟功力太渣不小心打错了个变量,居然调了40多分钟QAQ #include<cstd ...

  10. [GRYZ]寒假模拟赛

    写在前面 这是首次广饶一中的OIERS自编自导,自出自做(zuo)的模拟赛. 鉴于水平气压比较低,机(wei)智(suo)的WMY/XYD/HYXZC就上网FQ下海找了不少水(fei)题,经过他们优( ...

随机推荐

  1. 团队作业7——Beta版本冲刺计划及安排

    上一个阶段的总结: 在Alpha阶段,我们小组已近完成了大部分的功能要求,小组的每一个成员都发挥了自己的用处.经过了这么久的磨合,小组的成员之间越来越默契,相信在接下来的合作中,我们的开发速度会越来越 ...

  2. 顺企网 爬取16W数据保存到Mongodb

    import requests from bs4 import BeautifulSoup import pymongo from multiprocessing.dummy import Pool ...

  3. git cherry-pick 整理

    git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作.例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并, ...

  4. .Net Core SignalR 实时推送信息

    以前一直没用成功过SignalR(.net asp),最近几天又参考了对应的文档,最终调成功啦. 开始之前,应该注意: 一定要.Net Core 2.1.0以上的SDK. VS2017 15.6以上的 ...

  5. LeetCode & Q20-Valid Parentheses-Easy

    Stack String Description: Given a string containing just the characters '(', ')', '{', '}', '[' and ...

  6. Web Api HttpWebRequest 请求 Api 及 异常处理

    HttpWebRequest request = WebRequest.CreateHttp(url); request.Method = "post"; request.Head ...

  7. ### Cause: org.apache.ibatis.binding.BindingException: Parameter 'name' not found. Available parameters are [arg1, arg0, param1, param2]

    org.apache.ibatis.exceptions.PersistenceException: ### Error updating database. Cause: org.apache.ib ...

  8. Windows用户模式下注入方式总结

    注入技术在病毒木马.游戏.打补丁等编程中应用很广泛,学习该技术不仅能帮助理解Windows工作原理,还能对病毒木马技术手段有更加深刻的理解,下面我们了解下各种注入方式吧. 一.DLL注入 在注入技术中 ...

  9. ssl双向认证

    ssl双向认证 一.背景知识 1.名词解释 ca.key: 根证书的私钥 , ca.crt: 根证书的签名证书 server.key, server.crt client.key, client.cr ...

  10. FatMouse's Speed ~(基础DP)打印路径的上升子序列

    FatMouse believes that the fatter a mouse is, the faster it runs. To disprove this, you want to take ...