【NOIP2016提高组 day1】

NOIP2016 提高 Day 1 第一题 玩具谜题 题目描述 小南有一套可爱的玩具小人,它们各有不同的职业。 有一天,这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图: 这时singer告诉小南一个谜题:“眼镜藏在我左数第3个玩具小人的右数第1个玩 具小人的左数第2个玩具小人那里。” 小南发现,这个谜题中玩具小人的朝向非常关键,因为朝内和朝外的玩具小人的左右方向是相反的:面朝圈内的玩具小人,它的左边是顺时针方向,右边是逆时针方向;而面向圈外的玩具小人,它的左边是逆时针方向,右边是顺时针. 阅读详情
#题目
A【NOIP2016提高组 day1】玩具谜题
B【NOIP2016提高组 day1】天天爱跑步
C【NOIP2016提高组 day1】换教室

这就是现在联赛的难度么,,,这谁顶得住啊

A. 【NOIP2016提高组 day1】玩具谜题

数据量不大,模拟就行,这题给我感觉有点像 负负得正 的意思,比如朝内的左边等于朝外的右边

所以我设朝内为1,朝外为-1; 右为1,左为-1,然后就可以愉快的模拟啦

 

#include<bits/stdc++.h>
using namespace std;
int n,m;
struct node{
	int to;
	char s[15];
}pr[100100];
int main(){
//	freopen("toy.in","r",stdin);
//	freopen("toy.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		cin>>pr[i].to>>pr[i].s;
		if(pr[i].to==0)pr[i].to=1;
		else pr[i].to=-1;
	}
	int now=1;
	for(int i=1;i<=m;i++){
		int ai,si;
		scanf("%d%d",&ai,&si);
		if(ai==0)ai=-1;
		now=(now+si*pr[now].to*ai+n)%n;
		if(now==0)now=n;
	}
	cout<<pr[now].s;
	return 0;
} 

B. 【NOIP2016提高组 day1】天天爱跑步

这,,,居然是B题,,,

考试时的暴力只拿了25分,hh,没办法,除了暴力真想不出其他办法了

正解可以用差分+lca+桶,也可以用树链剖分(啥玩意完全没听过)

但,,,,题解完全看不懂,,,

依然没有代码的第三天,,,,

C. 【NOIP2016提高组 day1】换教室

这题我完全是被一大堆输入数据和蜜汁概率给整蒙了,又想到是第三题于是蜜汁感到恐惧,,,只有边打暴力边骂辣鸡题目

我的暴力连样例都没过居然骗了16分你敢信?

正解:动态规划,概率期望

完全没往动规上面去想过,,,

其实看懂了题还是不难的

洛谷上看到一篇题解讲的挺好的,于是我就把它搬运过来了,

  •  

    一、当前教室没有申请
    
    如果前一教室有申请: f[i][j][0]=min(f[i-1][j][1]f[i][j][0]=min(f[i−1][j][1]
    (1)成功:+k[i-1]*dis[d[i-1]][c[i]]+k[i−1]∗dis[d[i−1]][c[i]]
    (2)失败:+(1-k[i-1])*dis[c[i-1]][c[i]]+(1−k[i−1])∗dis[c[i−1]][c[i]]
    如果前一教室没有申请:,f[i-1][j][0],f[i−1][j][0],一定是前后均失败:+dis[c[i-1]][c[i]])+dis[c[i−1]][c[i]])
    
    二、当前教室有申请
    
    如果前一教室有申请:f[i][j][1]=min(f[i-1][j-1][1]f[i][j][1]=min(f[i−1][j−1][1]
    (1)前后均成功:+k[i-1]*k[i]*dis[d[i-1]][d[i]]+k[i−1]∗k[i]∗dis[d[i−1]][d[i]]
    (2)前成功、后失败:+k[i-1]*(1-k[i])*dis[d[i-1]][c[i]]+k[i−1]∗(1−k[i])∗dis[d[i−1]][c[i]]
    (3)前失败、后成功:+(1-k[i-1])*k[i]*dis[c[i-1]][d[i]]+(1−k[i−1])∗k[i]∗dis[c[i−1]][d[i]]
    (4)前后均失败:+(1-k[i-1])*(1-k[i])*dis[c[i-1]][c[i]]+(1−k[i−1])∗(1−k[i])∗dis[c[i−1]][c[i]]
    如果前一教室没有申请:,f[i-1][j-1][0],f[i−1][j−1][0]
    (1)后成功:+k[i]*dis[c[i-1]][d[i]]+k[i]∗dis[c[i−1]][d[i]]
    (2)后失败:+(1-k[i])*dis[c[i-1]][c[i]])+(1−k[i])∗dis[c[i−1]][c[i]])

    以后遇到这种题应该不至于全程懵逼吧,,,,应该,,,,

#include<bits/stdc++.h>
#define inf 999999999
using namespace std;
int n,m,v,e,c[10010],d[10010],a[2005][2005];
double k[10010],ans,f[2005][2005][2];//前i个时间点,共申请了j次,第i个时间点否/是进行了申请。
int main(){
//	freopen("classroom.in","r",stdin);
//	freopen("classroom.out","w",stdout);
	scanf("%d%d%d%d",&n,&m,&v,&e);
	for(int i=1;i<=n;i++)scanf("%d",&c[i]);
	for(int i=1;i<=n;i++)scanf("%d",&d[i]);
	for(int i=1;i<=n;i++)scanf("%lf",&k[i]);
	for(int i=1;i<=v;i++)
	for(int j=1;j<i;j++)a[i][j]=a[j][i]=inf;
	
	for(int i=1;i<=e;i++){
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		a[x][y]=a[y][x]=min(a[x][y],z);
	}
	
	for(int k1=1;k1<=v;k1++)
	for(int i=1;i<=v;i++)
	for(int j=1;j<i;j++)
	if (a[i][j]>a[i][k1]+a[k1][j])
                    a[j][i]=a[i][j]=a[i][k1]+a[k1][j];
	
	for(int i=1;i<=n;i++)
	for(int j=0;j<=m;j++)f[i][j][0]=f[i][j][1]=inf;
	f[1][0][0]=0;
    f[1][1][1]=0;
	for(int i=2;i<=n;i++)
	for(int j=0;j<=m;j++){
			f[i][j][0]=min(f[i-1][j][1]+k[i-1]*a[d[i-1]][c[i]]+(1-k[i-1])*a[c[i-1]][c[i]],
					       f[i-1][j][0]+a[c[i-1]][c[i]]);
		if(j!=0)
			f[i][j][1]=min(f[i-1][j-1][1]+k[i-1]*k[i]*a[d[i-1]][d[i]]+k[i-1]*(1-k[i])*a[d[i-1]][c[i]]+(1-k[i-1])*k[i]*a[c[i-1]][d[i]]+(1-k[i-1])*(1-k[i])*a[c[i-1]][c[i]],
			               f[i-1][j-1][0]+k[i]*a[c[i-1]][d[i]]+(1-k[i])*a[c[i-1]][c[i]]);
	}
	ans=inf;
	for(int i=0;i<=m;i++)
	ans=min(ans,min(f[n][i][0],f[n][i][1]));
	printf("%.2lf",ans);
	return 0;
} 
noip2016初赛提高c++试题+简要解析 noip2016提高c++试题+简要解析,试题清楚可以打印~~~~ 立即下载

相关推荐

NOIP2016普及提高试题:NOIP2016复赛普及试题&NOIP2016复赛提高试题

NOIP2016普及提高试题:NOIP2016复赛普及试题&NOIP2016复赛提高试题

2006-2020年 CSP-S1 NOIP提高 初赛1轮 真题及答案.rar

2006-2020年 CSP-S1 NOIP提高 初赛1轮 真题及答案.rar

NOIP2004-2016提高复赛历年原题&题解合集

NOIP2004-2016提高复赛历年原题&题解合集,精心整理,希望对你有帮助

2016-2020年 CSP-J1 CSP-S1 NOIP 初赛真题 答案及解析.rar

2016-2020年 CSP-J1 CSP-S1 NOIP 初赛真题 答案及解析.rar

NOIP2016提高初赛(1)

一、选择题 6、后缀表达式,使用二叉树来求解,正常情况下的表达式a*(b+c)- d为中序遍历的二叉树。 即 若转换为后缀表达式(左右根)则为abc+*d- 14、代数字进去,多试几遍; 三、问题求解 1、同斐波那契数列 F[n]表示有n个格子可以用来染成黑色时满足条件的染色方案数,则有 F[0]=1,F[1]=2; 对于第n个格子,有染黑色或不染黑色两种选择 若第n个格子染成...

weixin_30625691的博客 637

NOIP 2016 提高 初赛

NOIP 2016 提高 初赛 疑难点 学习 感悟。 一、 14. 二、 三、 四、 1. 2. 3. 直接将题目给的输入数据带入程序,要笔算得出结果,很困难,考虑,自底向上推导。 以下输入输出均是笔算得出: 输入:a 输出:1 输入:aa 输出:2 输入:ab 输出:1 输入:aaa 输出:3 输入:aab 输出:2 输入:ab

mrcrack的博客 1760

NOIP2016提高 day1】玩具谜题

NOIP2016提高 day1】玩具谜题 题解: 这是一道模拟题,不过呢大家可以取一下巧的如果当前发现与目标的方向一致就继续,否则就反向 #include<bits/stdc++.h> #define ll long long using namespace std; int n,m,flag,ans,bs,fx; struct oo{ int fx; stri...

聂泽宇的blog 509

NOIP2016提高Day1题解

NOIP2016提高Day1题解。

ZigZagK的博客 1584

NOIP2016 提高 复赛 day1 toy 玩具谜题

NOIP2016 提高 复赛 day1 toy 玩具谜题 1.读了题目,给绕晕了,什么朝里,朝内,左边右边,没心思手动模拟,但题意是看明白了,模拟准备交给程序。 2.因每个玩具有两个信息,朝向,职业名称,第一构想就是用结构提来描述玩具。 3.看到样例1就没往下看,没找到n的范围,直接数开到10^6,测试完样例2,才发现下面给出了n的范围,题目一定要看看完啊,题中n的范围10^5,还好,本

mrcrack的博客 1345

TEST2018.5.12(Noip2016提高Day1)

TEST2018.5.12(Noip2016提高Day1)为2019级lizw0520zzh的学生献上福利!!!题目描述(感谢洛谷爸爸):    玩具谜题    天天爱跑步    换教室T1玩具谜题:简单到不能再简单的模拟题了,思路就难得写了(因为后面两道题有点小难)代码如下(第一次养成写注释的习惯):#include&lt;iostream&gt; #include&lt;cstdio&gt;...

237

NOIP大纲整理:历年2000-2016NOIP提高题目分析.pdf

NOIP大纲整理:历年2000-2016NOIP提高题目分

NOIP2016提高Day1 真题测试

T1: 题目描述 小南有一套可爱的玩具小人,它们各有不同的职业。有一天,这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图: 这时 singer 告诉小南一个谜题:“眼镜藏在我左数第 3 个玩具小人的右数第 1 个玩具小人的左数第 2 个玩具小人那里。”小南发现,这个谜题中玩具小人的朝向非常关键,因为朝内和朝外的玩具小人的左右方向是相反的:

Suzime的博客 1289

NOIP2016提高day1

1.玩具谜题【NOIP2016提高】 有 n 个玩具小人围成一圈,已知它们的职业和朝向。现在第 1 个玩具小人告诉小南一个包含 m 条指令的谜题,其中第 i 条指令形如“左数/右数第 si 个玩具小人”。你需要输出依次数完这些指令后,到达的玩具小人的职业。 输入格式 输入的第一行包含两个正整数 n ,m ,表示玩具小人的个数和指令的条数。 接下来 n 行,每行包含一个

qq_37321744的博客 519

Noip2016 提高 Day1

T1 玩具迷题 直通 思路:   1.首先根据数据范围来看,储存小人的姓名开一个二维char数即可(不会开爆)   2.然后看他给出的样例以及条件什么的,能够确定出       ①朝内向右,朝外向左均为+       ②朝内向左,朝外向右均为-   但是需要注意的是  加完之后超出最大数n-1(我从0开始进行计数),所以需要进行-n             减完之后小于...

anjian3128的专栏 201

NOIP 2016 提高 Day 1 第三题 换教室

题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程。 在可以选择的课程中,有2n节课程安排在n个时间段上。在第i (1 <= i <= n)个时间段上,两节内容相同的课程同时在不同的地点进行,其中,牛牛预先被安排在教室ci上课,而另一节课程在教室di进行。 在不提交任何申请的情况下,学生们需要按时间段的顺序依次完成所有的n节安排好的课程。如果学生想更换第i节课程的教室,则需要提出申请。若申请通过,学生就可以在第i个时间段去教室di上课,否则仍然在教室ci上

qq_63422232的博客 237

NOIP2016提高 day1

1.玩具谜题 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业。 有一天, 这些玩具小人把小南的眼镜藏了起来。 小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图: 这时singersingersinger告诉小南一个谜題: “眼镜藏在我左数第3个玩具小人的右数第111个玩具小人的左数第222个玩具小人那里。 ” 小南发现, 这个谜题中玩具小人的朝向非常关键, 因为朝内和朝外的玩具小人的左右方向是相反的: 面朝圈内的玩具小人, 它的左边是顺时针方向, 右边是逆时针方向; 而面向

BetaCatiz的博客 466

NOIP2016提高DAY1题解

T1:玩具谜题 考察知识:模拟 算法难度:X+ 实现难度:X+ 分析: 把题目读懂之后就比较简单了,直接按题目说明模拟即可 为了简洁,我们用 0...n-1 表示每个小人的位置就可以了 代码: #include&lt;cstdio&gt; int n,m,f[100005];//f表示朝向 char name[100005][12]; int main(){ int f_,...

Hi_KER的博客 1127
上一篇: 【NOIP2012 提高组 day2】
下一篇: 笔记(数论)
Double020
博客等级 码龄8年 6粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值