2014-9-13 NOIP模拟赛
NOIP2014模拟赛
——lwher
|
题目名 |
环上的游戏 |
舞蹈课 |
数位和乘积 |
|
源文件 |
cycle.cpp/c/pas |
dancingLessons.pas/cpp |
digit.cpp.cpp/c/pas |
|
输入文件 |
cycle.in |
dancingLessons.in |
digit.in |
|
输出文件 |
cycle.out |
dancingLessons.out |
digit.out |
|
时间限制 |
1000MS |
1000MS |
1000MS |
|
内存限制 |
128MB |
256MB |
256MB |
|
测试点 |
10 |
10 |
10 |
|
测试点分值 |
10 |
10 |
10 |
环上的游戏(cycle)
有一个取数的游戏。初始时,给出一个环,环上的每条边上都有一个非负整数。这些整数中至少有一个0。然后,将一枚硬币放在环上的一个节点上。两个玩家就是以这个放硬币的节点为起点开始这个游戏,两人轮流取数,取数的规则如下:
(1)选择硬币左边或者右边的一条边,并且边上的数非0;
(2)将这条边上的数减至任意一个非负整数(至少要有所减小);
(3)将硬币移至边的另一端。
如果轮到一个玩家走,这时硬币左右两边的边上的数值都是0,那么这个玩家就输了。
如下图,描述的是Alice和Bob两人的对弈过程,其中黑色节点表示硬币所在节点。结果图(d)中,轮到Bob走时,硬币两边的边上都是0,所以Alcie获胜。
现在,你的任务就是根据给出的环、边上的数值以及起点(硬币所在位置),判断先走方是否有必胜的策略。
【输入格式】
第一行一个整数N(N≤20),表示环上的节点数。
第二行N个数,数值不超过30,依次表示N条边上的数值。硬币的起始位置在第一条边与最后一条边之间的节点上。
【输出格式】
仅一行。若存在必胜策略,则输出“YES”,否则输出“NO”。
【样例】
cycle.in cycle.out
4 YES
2 5 3 0
cycle.in cycle.out
3 NO
0 0 0
最后取到数的人获胜
/*
没找出必败态的判断条件,就打了个暴力
*/
#include<iostream>
#include<cstdio>
using namespace std;
#define maxn 30
int n,a[maxn],ans;
void dfs(int pos,int k){
if(ans)return;//存在必胜态
bool flag=;
if(a[pos]!=){//可以走顺时针方向
a[pos]--;
flag=;
dfs((pos+)%n,!k);
a[pos]++;
}
if(a[(pos-+n)%n]!=){//可以走逆时针方向
a[(pos-+n)%n]--;
flag=;
dfs((pos-+n)%n,!k);
a[(pos-+n)%n]++;
}
if(!flag&&k==){
ans=;
return;
}
}
int main(){
freopen("cycle.in","r",stdin);
freopen("cycle.out","w",stdout);
scanf("%d",&n);
for(int i=;i<n;i++)
scanf("%d",&a[i%n]);
dfs(,);
if(ans){
printf("YES");
}
else{
printf("NO");
}
}
70分 暴力
/*
本题由于至少存在一个0,所以其实就是考虑一条链的情况 然后可以得出一个显然的结论,如果取一条边,那么一定要将它的权变为0,然后按链长的奇偶得出答案即可
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<set>
#include<queue>
#include<map>
#define pa pair<int,int>
#define inf 1000000000
#define ll long long
using namespace std;
inline 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 n,l,r;
int a[];
int main()
{
//freopen("cycle.in","r",stdin);
//freopen("cycle.out","w",stdout);
n=read();r=n;
for(int i=;i<=n;i++)a[i]=read();
while(a[l+])l++;
while(a[r])r--;
r=n-r;
if(l&||r&)puts("YES");
else puts("NO");
return ;
}
100分
舞蹈课(dancingLessons)
问题描述
有n个人参加一个舞蹈课。每个人的舞蹈技术由整数来决定。在舞蹈课的开始,他们从左到右站成一排。当这一排中至少有一对相邻的异性时,舞蹈技术相差最小的那一对会出列并开始跳舞。如果相差最小的不止一对,那么最左边的那一对出列。一对异性出列之后,队伍中的空白按原顺序补上(即:若队伍为ABCD,那么BC出列之后队伍变为AD)。舞蹈技术相差最小即是的绝对值最小。
你的任务是,模拟以上过程,确定跳舞的配对及顺序。
输入
第一行为正整数:队伍中的人数。下一行包含n个字符B或者G,B代表男,G代表女。下一行为n个整数。所有信息按照从左到右的顺序给出。在50%的数据中,。
输出
第一行:出列的总对数k。接下来输出k行,每行是两个整数。按跳舞顺序输出,两个整数代表这一对舞伴的编号(按输入顺序从左往右1至n编号)。请先输出较小的整数,再输出较大的整数。
样例输入
4
BGBG
4 2 4 3
样例输出
2
3 4
1 2
样例输入
4
BGBB
1 1 2 3
样例输出
1
1 2
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<set>
#include<queue>
#include<map>
#define inf 1000000000
#define ll long long
using namespace std;
inline 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 n,ans;
int a[],nxt[],pre[],a1[],a2[];
char ch[];
bool mark[];
struct data{int val,pos;};
inline bool operator>(data a,data b)
{
return a.val>b.val||(a.val==b.val&&a.pos>b.pos);
}
void solve()
{
priority_queue<data,vector<data>,greater<data> >q;
for(int i=;i<n;i++)
if(ch[i]!=ch[i+])
q.push((data){abs(a[i]-a[i+]),i});
while(!q.empty())
{
int mn=q.top().val,now=q.top().pos;q.pop();
int l=pre[now],t=nxt[now],r=nxt[t];
if(mark[now]||mark[t])continue;
if(abs(a[now]-a[t])!=mn||ch[now]==ch[t])continue;
mark[now]=mark[t]=;
a1[++ans]=now;a2[ans]=t;
if(l&&r&&ch[r]!=ch[l])
{
q.push((data){abs(a[r]-a[l]),l});
}
nxt[l]=r;pre[r]=l;
}
printf("%d\n",ans);
for(int i=;i<=ans;i++)
printf("%d %d\n",a1[i],a2[i]);
}
int main()
{
//freopen("dancingLessons.in","r",stdin);
//freopen("dancingLessons.out","w",stdout);
n=read();mark[]=;
scanf("%s",ch+);
for(int i=;i<=n;i++)a[i]=read();
for(int i=;i<n;i++)nxt[i]=i+;
for(int i=;i<=n;i++)pre[i]=i-;
solve();
return ;
}
100分 小根堆+链表
数位和乘积(digit.cpp/c/pas)
【题目描述】
一个数字的数位和乘积为其各位数字的乘积。求所有的N位数中有多少个数的数位和乘积恰好为K。请注意,这里的N位数是可以有前导零的。比如01,02视为二位数,但是他们的数位和乘积都是0。
【输入格式】
一行两个整数N,K
【输出格式】
一个行一个整数表示结果。
【样例输入】
2 3
【样例输出】
2
【样例输入2】
2 0
【样例输出2】
19
【数据范围】
对于20%:N <= 6。
对于50%:N<=16
存在另外30%:K=0。
对于100%:N <= 50,0 <= K <= 10^9。
#include<iostream>
#include<cstdio>
using namespace std;
int n,k,a[],cnt;
int dfs(int pos){
if(pos==n+){
int now=;
for(int i=;i<=n;i++)
now*=a[i];
if(now==k)return ;
return ;
}
int ans=;
for(int i=;i<=;i++){
a[++cnt]=i;
ans+=dfs(pos+);
cnt--;
}
return ans;
}
int main(){
//freopen("Cola.txt","r",stdin);
freopen("digit.in","r",stdin);
freopen("digit.out","w",stdout);
scanf("%d%d",&n,&k);
printf("%d",dfs());
}
20分 暴力
2014-9-13 NOIP模拟赛的更多相关文章
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- CH Round #48 - Streaming #3 (NOIP模拟赛Day1)
A.数三角形 题目:http://www.contesthunter.org/contest/CH%20Round%20%2348%20-%20Streaming%20%233%20(NOIP模拟赛D ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
- 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...
- 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- CH Round #52 - Thinking Bear #1 (NOIP模拟赛)
A.拆地毯 题目:http://www.contesthunter.org/contest/CH%20Round%20%2352%20-%20Thinking%20Bear%20%231%20(NOI ...
随机推荐
- [2018-12-18]ABP中的AsyncCrudAppService介绍
前言 自从写完上次略长的<用ABP入门DDD>后,针对ABP框架的项目模板初始化,我写了个命令行工具Abp-CLI,其中子命令abplus init可以从github拉取项目模板以初始化项 ...
- PAT 天梯赛 L3-008. 喊山 【BFS】
题目链接 https://www.patest.cn/contests/gplt/L3-008 思路 因为 每个山头 最多有两个 能听到它的 临近山头 那么 我们就可以 给每个 山头 都 分配 最多两 ...
- Maven简介(五)——pom.xml
6 Maven的pom.xml介绍 6.1 简介 pom.xml文件是Maven进行工作的主要配置文件.在这个文件中我们可以配置Maven项目的groupId.artifactId ...
- css浏览器兼容问题集锦
表单按钮用input type=submit和a链接两者表现不一致的问题 表单的输入框.文本.验证码图片没有对齐 IE6/7中margin失效 IE6中margin双边距 1.问题: 表单按钮用inp ...
- C# 关于线程锁lock的使用方法
C# 关于线程锁lock的使用方法 原创 2016年09月02日 10:07:05 标签: c# / 线程 / 锁 / lock 11937 在多线程编程中,可能会有许多线程并发的执行一段代码(代码块 ...
- 9.1 NOIP普及组试题精解(1)
9-1 series1.c #include <stdio.h> int main() { float s=0.0,k; int n; printf("输入数字k(1~15):& ...
- android程序的真正入口
代码出自MtAndroid 3.1.2完全开发手册,适用于Android平台. 概述 android程序的真正入口是Application类的onCreate方法.它的继承关系如下所示: java.l ...
- IDEAL葵花宝典:java代码开发规范插件 lombok 插件
前言: lombok简介: lombok是暑假来到公司实习的时候发现的一个非常好用的小工具,刚见到的时候就感觉非常惊艳,有一种相见恨晚的感觉,用了一段时间之后感觉的确挺不错,所以特此来推荐一下. 那么 ...
- ajax异步上传文件FormDate方式,html支持才可使用
今天需要做一个头像的预览功能,所以我想到了异步上传文件. 总结几点: 异步上传难点: 文件二进制流如何获取 是否需要设置表单的头,就是content-Type那里.异步,所以无所谓了吧. 其他就差不多 ...
- listen and translation exercise 53
It was hard work and there weren't any interesting things for him. You should be an expert with comp ...