2017.11.8 Noip2017 考前模拟赛
----------------------------------T1----------------------------------
——>足球联赛
题目描述
巴蜀中学新一季的足球联赛开幕了。
足球联赛有 n 只球队参赛,每赛季,每只球队要与其他球队各赛两场,主客各一场,赢一场得 3 分,输一场不得分,平局两只队伍各得一分。
英勇无畏的小鸿是机房的主力前锋, 她总能在关键时刻踢出一些匪夷所思的妙球。
但是很可惜,她过早的燃烧完了她的职业生涯,不过作为一个能够 Burning 的 girl,她的能力不止如此,她还能预测这个赛季所有球队的比赛结果。
虽然她能准确预测所有比赛的结果,但是其实她不怎么厉害,Mr.Gao 上数学课时她总是在 sleep,
因此她的脑里只有整数没有实数,而且,她只会 10 以内非负整数的加法运算,
因此她只有结果却无法知道谁会获得联赛的冠军。
小鸿想给冠军队伍的所有队员一个拥抱,所以她把计算结果的任务交给了你:
现在,给你一个 n*n 的矩阵表示比赛情况。
第 i 行第 j 列的字母表示在第 i 只队伍在主场迎战第 j 只队伍的比赛情况,W 表示主队赢,L 表示主队输,D 表示平局。
现在需要你给出最后能得到小鸿拥抱的队伍编号,如有多支队伍分数最高,按字典序输出编号。
输入输出格式
输入格式:
第一行一个整数 n。
接下来 n 行,每行 n 个字符,表示输赢情况。
第 i 行第 i 列为 - ,因为一只队伍不可能与自己比赛。
输出格式:
输出得分最高的队伍编号。如有多个在一行中输出,用一个空格分开。
输入输出样例
3 -WW W-W WW-
1 2 3
5 -DWWD L-WLL DD-WD DDL-L DDLL-
1
说明
对于 40%的数据,满足 N<=20
对于 100%的数据,满足 N<=50
思路=A=
大模拟,如果主场赢了就+=3,输了就让另一个+=3(写成++,蠢哭了qaq),如果平局就双方++
代码酱=u=
#include <iostream> #include <cstdio> #include <algorithm> using namespace std;inline int read() {int x=0,f=1;char c=getchar();while(c<'0' || c>'9') { if(c=='-') f=-1; c=getchar(); }while('0'<=c && c<='9') x=x*10+c-'0',c=getchar();return x*f; }const int N = 60; int n; struct points {int id,w;points() { w=0; }bool operator < (const points &qwq ) const {return w > qwq.w;} } p[N];int main() {freopen("soccer.in","r",stdin);freopen("soccer.out","w",stdout);n=read();char c;for(int i=1; i<=n; i++) {p[i].id=i;for(int j=1; j<=n; j++) {cin>>c;if(c=='-') continue;else if(c=='W') p[i].w+=3;else if(c=='D') p[i].w++,p[j].w++;else if(c=='L') p[j].w+=3;}}sort(p+1,p+1+n);int x=p[1].w;for(int i=1; i<=n; i++) {if(p[i].w<x) break;printf("%d ",p[i].id);}fclose(stdin);fclose(stdout);return 0; }
View Code
----------------------------------------------------------------------
Ps:接下来就是单纯存个题=v=
----------------------------------------------------------------------
----------------------------------T2----------------------------------
——>最短路径
题目描述
平面内给出 n 个点,记横坐标最小的点为 A,最大的点为 B,现在小 Y 想要知道在每个点经过一次(A 点两次)的情况下从 A 走到 B,再回到 A 的最短路径。
但他是个强迫症患者,他有许多奇奇怪怪的要求与限制条件:
1.从 A 走到 B 时,只能由横坐标小的点走到大的点。
2.由 B 回到 A 时,只能由横坐标大的点走到小的点。
3.有两个特殊点 b1 和 b2, b1 在 0 到 n-1 的路上,b2 在 n-1 到 0 的路上。
请你帮他解决这个问题助他治疗吧!
输入输出格式
输入格式:
第一行三个整数 n,b1,b2,( 0 < b1,b2 < n-1 且 b1 <> b2)。n 表示点数,从 0 到 n-1 编号,b1 和 b2 为两个特殊点的编号。
以下 n 行,每行两个整数 x、y 表示该点的坐标(0 <= x,y <= 2000),从 0 号点顺序给出。
Doctor Gao 为了方便他的治疗,已经将给出的点按 x 增序排好了。
输出格式:
输出仅一行,即最短路径长度(精确到小数点后面 2 位)
输入输出样例
5 1 3 1 3 3 4 4 1 7 5 8 3
18.18
说明
20%的数据 n<=20
60%的数据 n<=300
100%的数据 n<=1000
对于所有数据 x,y,b1,b2 如题目描述.
T代码(暴力)
#include <iostream> #include <cstdio> #include <cmath> #include <ctime> #include <cstdlib> using namespace std;inline int read() {int x=0,f=1;char c=getchar();while(c<'0' || c>'9') { if(c=='-') f=-1; c=getchar(); }while('0'<=c && c<='9') x=x*10+c-'0',c=getchar();return x*f; }const int N = 1015; int n,AB,BA,t; double ans=1e8,jl[N][N]; bool vis[N]; struct point {int x,y; } P[N];double getjl(int a,int b) {int x=P[a].x,y=P[a].y,x2=P[b].x,y2=P[b].y;double p=max(x-x2,x2-x),q=max(y-y2,y2-y);p*=p;q*=q;return sqrt(p+q); }void dfs(int now,int cnt,double nowl) {if(nowl>ans) return;if(now!=0) vis[now]=true;if(now==n-1 && cnt==1) {if(!vis[AB]) return;dfs(now,2,nowl);}if(now==0 && cnt==2) {for(int i=1; i<n; i++) if(!vis[i]) return;if(ans>nowl) {ans=nowl;return;}} if(cnt==1) {for(int i=now+1; i<n; i++) {if(!vis[i] && i!=BA) {dfs(i,1,nowl+jl[now][i]);vis[i]=false;} }}else {for(int i=now-1; i>=0; i--) {if(!vis[i] && i!=AB) {dfs(i,2,nowl+jl[now][i]);vis[i]=false;}}} }int main() {freopen("paths.in","r",stdin);freopen("paths.out","w",stdout);n=read();AB=read();BA=read();for(int i=0; i<n; i++)P[i].x=read(),P[i].y=read();for(int i=0; i<n; i++)for(int j=0; j<n; j++) {if(i==j) continue;jl[i][j]=getjl(i,j);}dfs(0,1,0.00);printf("%.2lf",ans);fclose(stdin);fclose(stdout);return 0; }
View Code
----------------------------------T3----------------------------------
——>阿 Q 的停车场
题目描述
刚拿到驾照的 KJ 总喜欢开着车到处兜风,玩完了再把车停到阿 Q 的停车场里,虽然她对自己停车的水平很有信心,
但她还是不放心其他人的停车水平,尤其是 Kelukin。
于是,她每次都把自己的爱车停在距离其它车最远的一个车位。
KJ 觉得自己这样的策略非常科学,于是她开始想:
在一个停车场中有一排车位,从左到右编号为 1 到 n,初始时全部是空的。
有若干汽车,进出停车场共 m 次。
对于每辆进入停车场的汽车,会选择与其它车距离最小值最大的一个车位,若有多个符合条件,选择最左边一个。
KJ 想着想着就睡着了,在她一旁的 Kelukin 想帮她完成这个心愿,但是他又非常的懒,不愿意自己动手,于是就把这个问题就留给了你:
在 KJ 理想的阿 Q 的停车场中,给你车辆进出的操作序列,依次输出每辆车的车位编号。
输入输出格式
输入格式:
第一行,两个整数 n 和 m,表示停车场大小和操作数;
接下来 m 行,每行两个整数 F 和 x
F 是 1 表示编号为 x 的车进停车场;
F 是 2 表示编号为 x 的车出停车场;
保证操作合法,即:
出停车场的车一定目前仍在停车场里;
停车场内的车不会超过 n;
输出格式:
对于所有操作 1,输出一个整数,表示该车车位的编号。
输入输出样例
7 11 1 15 1 123123 1 3 1 5 2 123123 2 15 1 21 2 3 1 6 1 7 1 8
1 7 4 2 7 4 1 3
说明
对 30%的数据 n<=1000 ,m<=1000
对 60%的数据 n<=200000,m<=2000
对 100%的数据 n,m<=200000,车的编号小于等于 10^6
T代码(暴力)
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std;inline int read() {int x=0,f=1;char c=getchar();while(c<'0' || c>'9') { if(c=='-') f=-1; c=getchar(); }while('0'<=c && c<='9') x=x*10+c-'0',c=getchar();return x*f; }const int C = 100015; const int M = 200025; int n,m,F,x,now; int q[M]; bool vis[C]; struct car {int id,w; } a[M];int main() {freopen("park.in","r",stdin);freopen("park.out","w",stdout);n=read();m=read();while(m--) {F=read();x=read();if(F==1) {a[now].id=x;memset(q,0,sizeof(q));int top=0,w=1;for(int i=1; i<=n; i++)if(vis[i]) q[top++]=i;for(int i=1,Min,Max=0; i<=n; i++) {if(vis[i]) continue;Min=M;for(int j=0,y; j<top; j++) {y=max(i-q[j],q[j]-i);if(y<Min) Min=y;}if(Max<Min) Max=Min,w=i;}vis[w]=true;a[now++].w=w;printf("%d\n",w);}else {int id;for(int i=0; i<n; i++)if(a[i].id==x) {id=a[i].w;break;}vis[id]=false;}}fclose(stdin);fclose(stdout);return 0; }
View Code
转载于:https://www.cnblogs.com/zxqxwnngztxx/p/7804202.html
2017.11.8 Noip2017 考前模拟赛相关推荐
- 【NOIP考前模拟赛】纯数学方法推导——旅行者问题
一.写在前面 这题似乎是一道原创题目(不是博主原创),所以并不能在任何OJ上评测,博主在网盘上上传了数据(网盘地址:http://pan.baidu.com/s/1mibdMXi),诸位看官需者自取. ...
- 2017蓝桥杯java本科模拟赛
1.标题:算年龄 英国数学家德摩根出生于19世纪初叶(即18xx年). 他年少时便很有才华.一次有人问他的年龄,他回答说: "到了x的平方那年,我刚好是x岁". 请你计算一下,德摩 ...
- 2017.10.14 【FOTILE模拟赛】L 失败总结
很有代表性的一道题,什么都想不出来 首先有一个套路:区间的问题可以通过前缀和化成两点的问题 然后就是在区间找任意一/两个点的异或值最大, 在trie树上按二进制位从大到小贪心找就可以了 多组询问,所以 ...
- NOIP2017模拟赛总结(2017.10.30-2017.11.1)
第三篇博客,放上2017.10.30-2017.11.1的题. 2017.10.30 Problem A 题目大意: 有一排nnn棵果树和一个容量为sss的果篮,从前往后摘果,如果当前果树的果子数量不 ...
- 2017.6.11 校内模拟赛
题面及数据及std(有本人的也有原来的) :2017.6.11 校内模拟赛 T1 自己在纸上模拟一下后就会发现 可以用栈来搞一搞事情 受了上次zsq 讲的双栈排序的启发.. 具体就是将原盘子大小cop ...
- 2020年 第11届 蓝桥杯 第2次模拟赛真题详解及小结【Java版】
蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部分代码及程序 源自 蓝桥杯 官网视频(历年真题解析) 郑未老师. 2013年 第04届 蓝桥杯 ...
- NOIP2017提高组模拟赛4 (总结)
NOIP2017提高组模拟赛4 (总结) 第一题 约数 设K是一个正整数,设X是K的约数,且X不等于1也不等于K. 加了X后,K的值就变大了,你可以重复上面的步骤.例如K= 4,我们可以用上面的规则产 ...
- 9.11 myl模拟赛
9.11 myl 模拟赛 100 + 100 + 0 第一题耗费了太多的时间,导致最后一题没有时间想,直接去写了暴力,而且出题人没有给暴力分.... Problem 1. superman [题目描述 ...
- {小结}2016.6.11【初中部 NOIP提高组 】模拟赛C
2016.6.11[初中部 NOIP提高组 ]模拟赛C No.1!!! 100+33.3+10+90=233.3 23333 1298. 牛棚(graze2.pas/c/cpp) 题解 1299. 洗 ...
最新文章
- 【数据结构与算法】之深入解析“修剪二叉搜索树”的求解思路与算法示例
- PostgreSQL和MySQL技术全面剖析
- 怎么让Go Modules使用私有依赖模块
- 京东:应届博士生年薪最高达200万元!确认过眼神,是我羡慕不来的人
- 用fileupload处理文件上传
- MyEclipse的代码提示功能
- select2多选框无法手动排序问题[转载]
- python numpy和pandas做数据分析时去掉科学记数法显示
- java实现一个电子书下载系统
- 用树莓派3B+实现智能语音识别
- C4D插件X-Particles粒子特效(一)
- 利用反射等离激元超表面的模拟光计算
- 『UE4数字孪生』开发流程浅析(持续更新)
- 软件工程网络15结对编程作业(201521123062)
- Flask框架二 Jinja2
- PostgreSQL数据库存储结构
- Toast类实现消息提示框
- 前端加密中文,后端解密java
- Atlas:手淘Native容器化框架和思考-玄黎
- POI 设置单元格背景色,背景色编码与实际颜色对照表(SXSSFWorkbook4.1.2)
热门文章
- 计算机操作工 试题,计算机系统操作工试题
- ORA-01000: maximum open cursors exceeded问题处理
- 笔记1 标识符与基本数据类型
- 写给大忙人看的 - Java中图片压缩上传至MinIO服务器(4)
- 134179-38-7,N3-PEG3-NH2,Azide-PEG3-Amino叠氮-三聚乙二醇-氨基的化学性质
- Teamcity NuGet Installer
- C#开发BIMFACE系列19 服务端API之获取模型数据4:获取多个构件的共同属性
- 平均股价的时间序列图形_如何用公式表达股票平均价格
- 苹果手机来电铃声设置方法
- 来了!被誉为“世界新七大奇迹”的大兴机场正式投运!它有多牛?你想知道的都在这里!...