NOIP2016 模拟赛
——那些年,我们学过的文化课
背单词
(word.c/cpp/pas)
【题目描述】
fqk 退役后开始补习文化课啦, 于是他打开了英语必修一开始背单
词。 看着满篇的单词非常头疼, 而每次按照相同的顺序背效果并不好,
于是 fqk 想了一种背单词的好方法!他把单词抄写到一个 n 行 m 列的
表格里,然后每天背一行或者背一列。他的复习计划一共有 k 天,在
k 天后, fqk 想知道,这个表格中的每个单词,最后一次背是在哪一
天呢?
【输入格式】
第一行三个整数 k m n , , 。
接下来 k 行,每行的格式可能如下:
1. r ,表示当前天 fqk 背了第 r 行的单词。
. 2 c ,表示当前天 fqk 背了第 c 列的单词。
【输出格式】
输出包含 n 行, 每行 m 个整数, 表示每个格子中的单词最后一次背
是在哪天,如果这个单词没有背过,则输出 0 。
【输入样例】
3 3 3
1 2
2 3
1 3
【输出样例】
0 0 2
1 1 2
3 3 3
【数据范围】
对于 % 30 的数据, 1000 , ,  k m n 。
对于 % 100 的数据, 100000 , 100000 , 5000 ,     k m n m n 。
【时空限制】
对于每个测试点,时间限制为 s 1 ,空间限制为 MB 512 。

模拟

#include<cstdio>
#define maxn 5010
using namespace std;
int n,m,k,mxc[maxn],mxl[maxn];
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 Max(int x,int y){
return x>y?x:y;
}
int main(){
freopen("word.in","r",stdin);
freopen("word.out","w",stdout);
n=init();m=init();k=init();
int x,y;
for(int i=;i<=k;i++){
x=init();y=init();
if(x==)mxc[y]=i;
if(x==)mxl[y]=i;
}
for(int i=;i<=n;i++){
for(int j=;j<=m;j++)
printf("%d ",Max(mxc[i],mxl[j]));
printf("\n");
}
fclose(stdin);fclose(stdout);
return ;
}

脱水缩合
(merge.c/cpp/pas)
【题目描述】
fqk 退役后开始补习文化课啦, 于是他打开了生物必修一开始复习
蛋白质,他回想起了氨基酸通过脱水缩合生成肽键,具体来说,一个
氨基和一个羧基会脱去一个水变成一个肽键。于是他脑洞大开,给你
出了这样一道题:
fqk 将给你 6 种氨基酸和 m 个脱水缩合的规则,氨基酸用
' ' , ' ' , ' ' , ' ' , ' ' , ' ' f e d c b a 表示,每个规则将给出两个字符串 t s, ,其中
1 | | , 2 | |   t s ,表示 s 代表的两个氨基酸可以通过脱水缩合变成 t 。然后
请你构建一个长度为 n ,且仅由 ' ' , ' ' , ' ' , ' ' , ' ' , ' ' f e d c b a 构成的氨基酸序列,
如果这个序列的前两个氨基酸可以进行任意一种脱水缩合, 那么就可
以脱水缩合,脱水缩合后序列的长度将 1  ,这样如果可以进行 1  n 次
脱水缩合,最终序列的长度将变为 1 ,我们可以认为这是一个蛋白质,
如果最后的蛋白质为 ' 'a , 那么初始的序列就被称为一个好的氨基酸序
列。 fqk 想让你求出有多少好的氨基酸序列。
注:题目描述可能与生物学知识有部分偏差(即氨基酸进行脱水
缩合后应该是肽链而不是新的氨基酸),请以题目描述为准。
【输入格式】
第一行两个整数 q n, 。
接下来 q 行,每行两个字符串 t s, ,表示一个脱水缩合的规则。
【输出格式】
一行,一个整数表示有多少好的氨基酸序列。
【输入样例】
3 5
ab a
cc c
ca a
ee c
ff d
【输出样例】
4
【样例解释】
一共有四种好的氨基酸序列,其脱水缩合过程如下:
"abb" "ab" "a"
"cab" "ab" "a"
"cca" "ca" "a"
"eea" "ca" "a"
【数据范围】
对于 % 100 的数据, 36 , 6 2    q n 。数据存在梯度。
【时空限制】
对于每个测试点,时间限制为 s 2 ,空间限制为 MB 512 。

这题卡读题啊 无语了

#include<cstdio>
#define maxn 110
using namespace std;
int n,m,f[maxn][maxn][maxn],r[maxn],ans;
char s[],c[];
bool vis[];
void dfs(int now,int x,int y){
if(now==n+){
if(x!=)return;
int mx=;
for(int i=;i<=n;i++)
mx=mx*+r[i];
if(vis[mx])return;
vis[mx]=;
ans++;return;
}
for(int i=;i<=;i++)
if(f[x][y][i])dfs(now+,i,r[now+]);
}
void Dfs(int now){
if(now==n+){
dfs(,r[],r[]);return;
}
for(int i=;i<=;i++){
r[now]=i;Dfs(now+);r[now]=;
}
}
int main()
{
freopen("merge.in","r",stdin);
freopen("merge.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++){
scanf("%s%s",s,c);
int x=s[]-'a'+,y=s[]-'a'+,z=c[]-'a'+;
f[x][y][z]=;
}
Dfs();printf("%d\n",ans);
fclose(stdin);fclose(stdout);
return ;
}

一次函数
(fx.c/cpp/pas)
【题目描述】
fqk 退役后开始补习文化课啦, 于是他打开了数学必修一开始复习
函数, 他回想起了一次函数都是 b kx x f   ) ( 的形式, 现在他给了你 n 个
一次函数
i i i
b x k x f   ) ( , 然后将给你 m 个操作, 操作将以如下格式给出:
M . 1 i k b ,把第 i 个函数改为 b kx x f i   ) ( 。
Q . 2 l r x ,询问 ))) ( (... (
1
x f f f
l r r 
mod 1000000007 的值。
【输入格式】
第一行两个整数 n , m ,代表一次函数的数量和操作的数量。
接下来 n 行,每行两个整数,表示
i
k ,
i
b 。
接下来 m 行,每行的格式为 M i k b 或 Q l r x 。
【输出格式】
对于每个操作 Q ,输出一行表示答案。
【输入样例】
5 5
4 2
3 6
5 7
2 6
7 5
Q 1 5 1
Q 3 3 2
M 3 10 6
Q 1 4 3
Q 3 4 4
【输出样例】
1825
17
978
98
【数据范围】
对于 % 30 的数据, 1000 ,  m n 。
对于 % 100 的数据, 1000000007 , , , 200000 ,   x b k m n 。
【时空限制】
对于每个测试点,时间限制为 s 2 ,空间限制为 MB 512 。

暴力不粘了

线段树

/*线段树 每个节点维护 k b 合并的时候手推一下式子就好了 跑的略慢 */
#include<cstdio>
#define mod 1000000007
#define ll long long
#define lc k*2
#define rc k*2+1
#define mid (l+r)/2
#define maxn 200010
#ifdef unix
#define LL "%lld\n"
#else
#define LL "%I64d\n"
#endif
using namespace std;
int n,m;
ll A[maxn*],B[maxn*];
char s[];
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;
}
void Insert(int k,int l,int r,int x,int a,int b){
if(l==r){
A[k]=a;B[k]=b;return;
}
if(x<=mid)Insert(lc,l,mid,x,a,b);
else Insert(rc,mid+,r,x,a,b);
A[k]=A[lc]*A[rc]%mod;B[k]=(A[rc]*B[lc]%mod+B[rc])%mod;
}
ll Queryk(int k,int l,int r,int x,int y){
if(x<=l&&y>=r)return A[k];
if(y<=mid)return Queryk(lc,l,mid,x,y);
else if(x>mid)return Queryk(rc,mid+,r,x,y);
else{
ll kl=Queryk(lc,l,mid,x,y);
ll kr=Queryk(rc,mid+,r,x,y);
return kl*kr%mod;
}
}
ll Queryb(int k,int l,int r,int x,int y){
if(x<=l&&y>=r)return B[k];
if(y<=mid)return Queryb(lc,l,mid,x,y);
else if(x>mid)return Queryb(rc,mid+,r,x,y);
else{
ll bl=Queryb(lc,l,mid,x,y);
ll br=Queryb(rc,mid+,r,x,y);
ll kr=Queryk(rc,mid+,r,x,y);
return (kr*bl%mod+br)%mod;
}
}
int main()
{
freopen("fx.in","r",stdin);
freopen("fx.out","w",stdout);
n=init();m=init();ll x,y,z;
for(int i=;i<=n;i++){
x=init();y=init();
Insert(,,n,i,x,y);
}
for(int i=;i<=m;i++){
scanf("%s",s);x=init();y=init();z=init();
if(s[]=='M')Insert(,,n,x,y,z);
else if(s[]=='Q'){
ll K=Queryk(,,n,x,y);
ll BB=Queryb(,,n,x,y);
printf(LL,(K*z%mod+BB)%mod);
}
}
fclose(stdin);fclose(stdout);
return ;
}

11.9 noip模拟试题的更多相关文章

  1. 11.14 noip模拟试题

      题目名称 正确答案 序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer ...

  2. 11.13 noip模拟试题

    题目名称 笔记 括号 城堡可执行文件名 note brackets castle输入文件名 note.in brackets.in castle.in输出文件名 note.in brackets.ou ...

  3. 11.12 noip模拟试题

    题目名称 加密 冒泡排序图 重建可执行文件名 encrypt bubble rebuild输入文件名 encrypt.in bubble.in rebuild.in输出文件名 encrypt.in b ...

  4. 11.10 noip模拟试题

    1.第K小数 (number.cpp/c/pas) [问题描述] 有两个正整数数列,元素个数分别为N和M.从两个数列中分别任取一个数 相乘,这样一共可以得到N*M个数,询问这N*M个数中第K小数是多少 ...

  5. 11.7 NOIP模拟赛

    目录 2018.11.7 NOIP模拟 A 序列sequence(two pointers) B 锁lock(思路) C 正方形square(埃氏筛) 考试代码 B C 2018.11.7 NOIP模 ...

  6. 11/1 NOIP 模拟赛

    11.1 NOIP 模拟赛 期望得分:50:实际得分:50: 思路:暴力枚举 + 快速幂 #include <algorithm> #include <cstring> #in ...

  7. 10.11 noip模拟试题

    4题均为128M,1s 1. 锻炼计划(exercise.pas) 身体是革命的本钱,OIers不要因为紧张的学习和整天在电脑前而忽视了健康问题.小x设计了自己的锻炼计划,但他不知道这个计划是否可行, ...

  8. 10.27 noip模拟试题

    1.铺瓷砖(tile.cpp/c/pas)[问题描述]有一面很长很长的墙. 你需要在这面墙上贴上两行瓷砖. 你的手头有两种不同尺寸的瓷砖,你希望用这两种瓷砖各贴一行.瓷砖的长可以用分数表示,贴在第一行 ...

  9. 10.26 noip模拟试题

    enc[问题背景]zhx 和他的妹子聊天.[问题描述]考虑一种简单的加密算法.假定所有句子都由小写英文字母构成,对于每一个字母,我们将它唯一地映射到另一个字母.例如考虑映射规则:a->b, b- ...

随机推荐

  1. Php使用sqlite

    php sqlite文档:http://php.net/manual/en/book.sqlite.php sql:http://www.php100.com/html/webkaifa/PHP/PH ...

  2. bzoj2426

    稍微列个式子就知道是贪心 ..] of longint; m,b,h0,n,i,p,j,x,ans,s:longint; procedure swap(var a,b:longint); var c: ...

  3. [转]CharacterController与Rigidbody

    From: http://blog.csdn.net/czlilove/article/details/9139103 今天下午碰到个问题纠结了很久:人物加上了Rigidbody并使用了重力,遇到悬崖 ...

  4. 还是畅通工程 --HDOJ 1233

    还是畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  5. 给Apache加载rewrite模块后,服务器返回500错误,以及a2enmod命令

    我的机子是Ubuntu. 今天想给url做一个rewrite,让url看起来更漂亮一点.在Apache配置文件(我的是 /etc/apache/apache2.conf)文件中已经把AllOverri ...

  6. devi into python 笔记(六)正则表达式 原始字符串

    字符串函数replace: #string.replace: #字符串的replace方法:替换子串,不改变原来的字符串 s = "broad road" #打印出来会发现不单单是 ...

  7. 《C语言程序设计现代方法》第1章 C语言概述

    C语言的特点:C语言是一种底层语言.C语言是一种小型语言.C语言是一种包容性语言. C语言的优点:高效.可移植.功能强大.灵活.标准库.与UNIX系统集成. C语言的缺点:C程序更容易隐藏错误.C程序 ...

  8. jQuery 参考手册 - 效果

    (speed可选:规定动画的速度.默认是 "normal",可能的值:毫秒(比如 1500)"slow""normal""fast ...

  9. 《神经网络和深度学习》系列文章三:sigmoid神经元

    出处: Michael Nielsen的<Neural Network and Deep Leraning>,点击末尾“阅读原文”即可查看英文原文. 本节译者:哈工大SCIR硕士生 徐伟 ...

  10. zoj3329 One Person Game

    One Person Game Time Limit: 1 Second Memory Limit: 32768 KB Special Judge There is a very simple and ...