9.20 noip模拟试题
Problem 1 双色球(ball.cpp/c/pas)
【题目描述】
机房来了新一届的学弟学妹,邪恶的chenzeyu97发现一位学弟与他同名,于是他当起了善良的学长233
“来来来,学弟,我考你道水题检验一下你的水平……”
一个栈内初始有n个红色和蓝色的小球,请你按照以下规则进行操作
- 只要栈顶的小球是红色的,将其取出,直到栈顶的球是蓝色
- 然后将栈顶的蓝球变成红色
- 最后放入若干个蓝球直到栈中的球数为n
以上3步骤为一次操作
如栈中都是红色球,则操作停止,请问几次操作后停止
chenzeyu97出完题发现他自己不能AC所以想请你帮忙
【输入格式】
第一行为一个整数n,表示栈的容量为n
第二行为一个字符串,第i个字符表示自顶向下的第i个球的颜色,R代表红色,B代表蓝色
【输出格式】
一个整数表示操作数
【样例输入】
样例1:
3
RBR
样例2:
4
RBBR
【样例输出】
样例1:2
样例2:6
【样例解释】
样例1:
样例2:
【数据范围】
50%的数据,1<=n<=20
100%的数据,1<=n<=50
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 110
#define ll unsigned long long
using namespace std;
int n;
ll ans;
char c[maxn];
ll pow(ll x,ll y){
ll r=;
for(int i=;i<=y;i++)
r*=x;
return r;
}
int main()
{
//freopen("ball.in","r",stdin);
//freopen("ball.out","w",stdout);
cin>>n>>c;
for(int i=;i<n;i++)
if(c[i]=='B')ans+=pow(,i);
cout<<ans<<endl;
return ;
}
Problem 2 魔方(cube.cpp/c/pas)
【题目描述】
ccy(ndsf)觉得手动复原魔方太慢了,所以他要借助计算机。
ccy(ndsf)家的魔方都是3*3*3的三阶魔方,大家应该都见过。
(3的“顺时针”改为“逆时针”,即3 4以图为准。)
ccy(ndfs)从网上搜了一篇攻略,并找人翻译成了他自己会做的方法。现在告诉你他的魔方情况,以及他从网上搜到的攻略,请你求出最后魔方变成什么样子。
【输入格式】
第一行,一串数字,表示从网上搜到的攻略。
下面6*3行,每行3个数字,每三行表示魔方一个面的情况,六个面的顺序是前、后、左、右、上、下。
【输出格式】
6*3行,表示处理后的魔方,形式同输入。
【样例输入】
23
121
221
111
123
321
111
123
321
132
132
231
132
121
112
233
332
111
333
【样例输出】
123
222
113
212
321
113
122
321
132
121
333
121
211
312
113
331
111
331
【样例解释】
【数据范围】
40%的数据,攻略的长度小于5且仅有4种操作的其中一种
100%的数据,攻略的长度小于100
/*我尼玛卡读题啊 怎么转的尼玛*/
Problem 3 czy的后宫(harem.cpp/c/pas)
【题目描述】
czy要妥善安排他的后宫,他想在机房摆一群妹子,一共有n个位置排成一排,每个位置可以摆妹子也可以不摆妹子。有些类型妹子如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看了。假定每种妹子数量无限,求摆妹子的方案数。
【输入格式】
输入有m+1行,第一行有两个用空格隔开的正整数n、m,m表示妹子的种类数。接下来的m行,每行有m个字符1或0,若第i行第j列为1,则表示第i种妹子第j种妹子不能排在相邻的位置,输入保证对称。(提示:同一种妹子可能不能排在相邻位置)。
【输出格式】
输出只有一个整数,为方案数(这个数字可能很大,请输出方案数除以1000000007的余数。
【样例输入】
2 2
01
10
【样例输出】
7
【样例说明】
七种方案为(空,空)、(空,1)、(1、空)、(2、空)、(空、2)、(1,1)、(2,2)。
【数据范围】
20%的数据,1<n≤5,0<m≤10。
60%的数据,1<n≤200,0<m≤100。
100%的数据,1<n≤1000000000,0<m≤100。
注:此题时限1.5s是因为本评测机跑太慢,大家正常做
但写的太丑可能T一俩个点
↓
/*你说的很对.....我写的丑*/
暴力dp
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 110
#define mod 1000000007
using namespace std;
int n,m,f[maxn][maxn],ans;
char g[maxn][maxn];
int main()
{
freopen("harem.in","r",stdin);
freopen("harem.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
for(int j=;j<=m;j++)
g[i][j]='';
for(int i=;i<=m;i++)
for(int j=;j<=m;j++)
cin>>g[i][j];
f[][]=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int k=;k<=m;k++)
if(g[j][k]=='')
f[i][j]=(f[i][j]+f[i-][k])%mod;
for(int i=;i<=m;i++)
ans=(ans+f[n][i])%mod;
printf("%d\n",ans);
return ;
}
矩阵乘法优化
/*
矩阵乘法优化0.0
m*m的f数组只用第一行行第一列
假设当前的f乘了i次g那么f[j][0]就是dp[i][j]
第一行是复制的第一列 矩阵*的时候用的
最后答案就是f*g^n 的Σf[i][0]
(不知道理解的对不对 欢迎指错)
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 110
#define mod 1000000007
#define ll long long
using namespace std;
ll n,m,a[maxn],f[maxn][maxn],g[maxn][maxn],ans;
char c;
void mul(ll a[maxn][maxn],ll b[maxn][maxn]){
ll c[maxn][maxn];
memset(c,,sizeof(c));
for(int i=;i<=m;i++)
for(int j=;j<=m;j++)
for(int k=;k<=m;k++)
c[i][j]=(c[i][j]+a[i][k]*b[k][j])%mod;
for(int i=;i<=m;i++)
for(int j=;j<=m;j++)
a[i][j]=c[i][j];
}
int main()
{
//freopen("harem.in","r",stdin);
//freopen("harem.out","w",stdout);
cin>>n>>m;
for(int i=;i<=m;i++)
for(ll j=;j<=m;j++){
cin>>c;
if(c=='')g[i][j]=;
}
for(int i=;i<=m;i++)
g[i][]=g[][i]=;
for(ll i=;i<=m;i++)
f[i][i]=;
while(n){
if(n&)mul(f,g);
n>>=;mul(g,g);
}
for(int i=;i<=m;i++)
ans=(ans+f[i][])%mod;
cout<<ans<<endl;
return ;
}
Problem 4 mex(mex.cpp/c/pas)
/*
【bzoj3339】Rmq Problem
*/
暴力30
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 200010
using namespace std;
int n,m,a[maxn],mx;
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
int main()
{
freopen("mex.in","r",stdin);
freopen("mex.out","w",stdout);
n=init();m=init();
for(int i=;i<=n;i++){
a[i]=init();
mx=max(mx,a[i]);
}
mx++;
while(m--){
int f[mx+],l,r;
memset(f,,sizeof(f));
l=init();r=init();
for(int i=l;i<=r;i++)
f[a[i]]=;
for(int i=;i<=mx;i++)
if(!f[i]){
printf("%d\n",i);
break;
}
}
return ;
}
conclusion
/*
T1 做这题还是有一番经历的 但结局QAQ
第一眼 简单模拟 easy 啪啦啪啦打完
后来一想 我尼玛超时
yy正解 拍一下 yes一样!
这时候需要冷静!有没有暴力搞不到的情况
嗯 longlong 搞不到
手造一组 果然啊 机智的我啊
位运算不支持longlong 果断手打pow
嗯 手造的对了(其实没对 看着出了个longlong那么长的数就放了)
然而事实是 最后那个pow打错了 打错了 打错了
生无可恋了.... T2 尼玛卡读题的 这背面是咋转的啊
放了 毕竟今天有三个题 T3 嗯 dp 有思路 有方程 很好
哎 卧槽 这数据这一坨0逗我呢吧
哎呀呀先打个60的 待会留着拍
结果到最后也没想出正解 T4不会做 似乎超纲了 暴力30 今天T1考虑的过程还是很全面的 然而最后大意了
T3正解居然是矩阵乘法 没想到还能优化dp
学习了一下 很神奇的
*/
9.20 noip模拟试题的更多相关文章
- 11.14 noip模拟试题
题目名称 正确答案 序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer ...
- 10.26 noip模拟试题
enc[问题背景]zhx 和他的妹子聊天.[问题描述]考虑一种简单的加密算法.假定所有句子都由小写英文字母构成,对于每一个字母,我们将它唯一地映射到另一个字母.例如考虑映射规则:a->b, b- ...
- 神奇的Noip模拟试题 T3 科技节 位运算
3 科技节 (scifest.pas/.c/.cpp) [问题描述] 一年一度的科技节即将到来.同学们报名各项活动的名单交到了方克顺校长那,结果校长一看皱了眉头:这帮学生热情竟然如此高涨,每个人都报那 ...
- 神奇的Noip模拟试题一试 2 排队
2 排队 (lineup.pas/.c/.cpp) [问题描述] 小sin所在的班有n名同学,正准备排成一列纵队,但他们不想按身高从矮到高排,那样太单调,太没个性.他们希望恰好有k对同学是高的在前,矮 ...
- 11.13 noip模拟试题
题目名称 笔记 括号 城堡可执行文件名 note brackets castle输入文件名 note.in brackets.in castle.in输出文件名 note.in brackets.ou ...
- 11.12 noip模拟试题
题目名称 加密 冒泡排序图 重建可执行文件名 encrypt bubble rebuild输入文件名 encrypt.in bubble.in rebuild.in输出文件名 encrypt.in b ...
- 11.10 noip模拟试题
1.第K小数 (number.cpp/c/pas) [问题描述] 有两个正整数数列,元素个数分别为N和M.从两个数列中分别任取一个数 相乘,这样一共可以得到N*M个数,询问这N*M个数中第K小数是多少 ...
- 11.9 noip模拟试题
NOIP2016 模拟赛——那些年,我们学过的文化课背单词(word.c/cpp/pas)[题目描述]fqk 退役后开始补习文化课啦, 于是他打开了英语必修一开始背单词. 看着满篇的单词非常头疼, 而 ...
- 10.27 noip模拟试题
1.铺瓷砖(tile.cpp/c/pas)[问题描述]有一面很长很长的墙. 你需要在这面墙上贴上两行瓷砖. 你的手头有两种不同尺寸的瓷砖,你希望用这两种瓷砖各贴一行.瓷砖的长可以用分数表示,贴在第一行 ...
随机推荐
- bzoj 3287: Mato的刷屏计划 高精水题 && bzoj AC150
3287: Mato的刷屏计划 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 124 Solved: 43[Submit][Status] Desc ...
- 要将PYTHON应用于工作啦
分析同事在线答疑的数据,考评模型还未最终给出: import time import sys import optparse #操作代码和同事名对应的文件 opfile = 'op_name.txt' ...
- 关于C51内的code,idata,xdata
从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类型,分别对应code.data.xdata.idata以及根据51系列特点而设定的 ...
- 《深度探索c++对象模型》chapter2 构造函数语义学
关于c++,最常听到的一个抱怨是,编译器背着程序员做了太多事情,conversion运算符是最常被引用的一个例子:jerry schwarz,iostream函数库的建筑师,就曾经说过一个故事,他说他 ...
- Maven学习(2) - Maven构建多模块Java工程
概述 项目开发时,通常会将项目分为多个模块进行开发,本文讨论如何用Maven构建多模块的Java工程. 软件环境 Java:1.6.0_26 Maven:3.1.1 OS:WindowXP SP3 项 ...
- 【转】MFC窗口句柄各类指针获取函数
原文网址:http://www.pythonschool.com/CPP_JHK/5003.html 获取所在类窗口的句柄 this->m_hwnd; // this是一个指针,指向当前类的实例 ...
- Android TextView setText内嵌html标签
由于得到的数据是保存在数据库里面的,不好对数据的某一部分进行操作.解决办法在数据库里面存数据的时候加上html的标签对, 如data = <中华人名共和国道路交通安全实施条例>第<u ...
- 如何将Java源代码文件的编码从GBK转为UTF-8?
有时候看到有意思的demo,在头痛导入项目的编码和workspace的编码不一样的时候 我试着将 笔记本打开一个类一个类的复制, demo的类比较少的时候 可以忍受,demo的类多的时候 除了靠之外 ...
- HDU 5933 ArcSoft's Office Rearrangement 【模拟】(2016年中国大学生程序设计竞赛(杭州))
ArcSoft's Office Rearrangement Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- Linux学习笔记26——信号量
一 信号量的基本概念 信号量:它是一个特殊变量,只允许对它进行等待和发送信号这两种操作. 假设有一个信号量变量sv P(sv):用于等待,如果sv的值大于零,就给它减去1,如果它的值等于零,就挂起该进 ...