/*
这大概是我第一次整理模拟赛吧.
唉.
T2打了很长时间.
一开始读错题了中间都能缩合了.
真心对不起生物老师hhh.
这种状态判重的题目还是做的太少!
*/

背单词

【题目描述】

  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% 的数据, n,m,k<=1000 。

  对于 100% 的数据, n,m<=5000,nm<=100000,k<=100000。

【时空限制】

  对于每个测试点,时间限制为 1s ,空间限制为 512MB 。

/*
暴力.
kn.
*/
#include<iostream>
#include<cstdio>
#define MAXN 5001
using namespace std;
int l[MAXN],c[MAXN],n,m,k,g[MAXN][MAXN];
int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*f;
}
int main()
{
//freopen("word.in","r",stdin);
//freopen("word1.out","w",stdout);
int x,y;
n=read(),m=read(),k=read();
for(int i=1;i<=k;i++)
{
x=read(),y=read();
if(x&1)
{
for(int j=1;j<=m;j++) g[y][j]=i;
}
else
{
for(int j=1;j<=n;j++) g[j][y]=i;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
printf("%d ",g[i][j]);
printf("\n");
}
return 0;
}
/*
模拟.
*/
#include<iostream>
#include<cstdio>
#define MAXN 5001
using namespace std;
int l[MAXN],c[MAXN],n,m,k;
int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*f;
}
int main()
{
freopen("word.in","r",stdin);
freopen("word.out","w",stdout);
int x,y;
n=read(),m=read(),k=read();
for(int i=1;i<=k;i++)
{
x=read(),y=read();
if(x&1) l[y]=i;
else c[y]=i;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
printf("%d ",max(l[i],c[j]));
printf("\n");
}
return 0;
}

【题目描述】

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 。

/*
Bfs.
从末状态向前找合法状态.
状态总数不到700w.
数据太水乱搞即可23333.
*/
#include<iostream>
#include<cstdio>
#include<queue>
#define MAXN 1001
#define INF 7000001
#define MAXM 40
using namespace std;
int n,m,ans,t[9];
struct data{int x,l;};
struct node{int x[MAXM],tot;}a[MAXM];
bool b[INF];
queue<data>q;
int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*f;
}
inline void check()
{
if(n==1)
{
for(int i=1;i<=6;i++) ans+=b[i];
}
else if(n==2)
{
for(int i=1;i<=6;i++)
for(int j=1;j<=6;j++)
ans+=b[i*10+j];
}
else if(n==3)
{
for(int i=1;i<=6;i++)
for(int j=1;j<=6;j++)
for(int k=1;k<=6;k++)
ans+=b[i*100+j*10+k];
}
else if(n==4)
{
for(int l=1;l<=6;l++)
for(int i=1;i<=6;i++)
for(int j=1;j<=6;j++)
for(int k=1;k<=6;k++)
ans+=b[l*1000+i*100+j*10+k];
}
else if(n==5)
{
for(int w=1;w<=6;w++)
for(int l=1;l<=6;l++)
for(int i=1;i<=6;i++)
for(int j=1;j<=6;j++)
for(int k=1;k<=6;k++)
ans+=b[w*10000+l*1000+i*100+j*10+k];
}
else if(n==6)
{
for(int p=1;p<=6;p++)
for(int w=1;w<=6;w++)
for(int l=1;l<=6;l++)
for(int i=1;i<=6;i++)
for(int j=1;j<=6;j++)
for(int k=1;k<=6;k++)
ans+=b[p*100000+w*10000+l*1000+i*100+j*10+k];
}
}
void bfs()
{
t[0]=1;int x,z,w;
for(int i=1;i<=7;i++) t[i]=t[i-1]*10;
q.push((data){1,1});
while(!q.empty())
{
data u=q.front();q.pop();
if(u.l==n) continue;
for(int i=1;i<=min(u.l,1);i++)
{
x=(u.x%t[u.l-i+1])/t[u.l-i];
z=(u.x-u.x%t[u.l-i+1])*10;
w=u.x%t[u.l-i];
for(int j=1;j<=a[x].tot;j++)
{
int y=a[x].x[j]*t[u.l-i];
if(!b[z+y+w])
b[z+y+w]=true,q.push((data){z+y+w,u.l+1});
}
}
}
}
int main()
{
freopen("merge.in","r",stdin);
freopen("merge.out","w",stdout);
char x,y,z;
n=read(),m=read();
for(int i=1;i<=m;i++)
{
cin>>x>>y>>z;x-=96,y-=96,z-=96;
a[z].x[++a[z].tot]=x*10+y;
}
bfs();
check();
cout<<ans;
return 0;
}

一次函数

【题目描述】

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 行,每行两个整数,表示

mod 1000000007 的值。接下来 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 。

【时空限制】

对于每个测试点,时间限制为2 s ,空间限制为 512 MB。

/*
线段树.
对于合并两者的k,b
设前为k1,b1 后为 k2,b2.
则合并k2*(k1*x+b1)+b2.
则转化为k2*k1*x+k2*b1+b2
即k为k2*k1,b为k2*b1+b2.
线段树维护即可.
*/
#include<iostream>
#include<cstdio>
#define MAXN 200001
#define LL long long
#define mod 1000000007
using namespace std;
int n,m,cut;
struct data{int l,r,lc,rc;LL b,k;}tree[MAXN*4];
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*f;
}
inline void build(int l,int r)
{
int k=++cut;tree[k].l=l,tree[k].r=r;
if(l==r)
{
tree[k].k=read(),tree[k].b=read();return ;
}
int mid=(l+r)>>1;
tree[k].lc=cut+1;
build(l,mid);
tree[k].rc=cut+1;
build(mid+1,r);
tree[k].k=tree[tree[k].lc].k*tree[tree[k].rc].k%mod;
tree[k].b=
(tree[tree[k].rc].k*tree[tree[k].lc].b%mod+tree[tree[k].rc].b)%mod;
return;
}
void add(int k,int p,int kk,int b)
{
if(tree[k].l==tree[k].r)
{
tree[k].k=kk,tree[k].b=b;
return ;
}
int mid=(tree[k].l+tree[k].r)>>1;
if(p<=mid) add(tree[k].lc,p,kk,b);
else add(tree[k].rc,p,kk,b);
tree[k].k=tree[tree[k].lc].k*tree[tree[k].rc].k%mod;
tree[k].b=
(tree[tree[k].rc].k*tree[tree[k].lc].b%mod+tree[tree[k].rc].b)%mod;
return;
}
LL queryk(int k,int l,int r)
{
if(l<=tree[k].l&&tree[k].r<=r) return tree[k].k;
LL tot=1,mid=(tree[k].l+tree[k].r)>>1;
if(l<=mid) tot*=queryk(tree[k].lc,l,r)%mod;
if(r>mid) tot*=queryk(tree[k].rc,l,r)%mod;
return tot%mod;
}
LL queryb(int k,int l,int r)
{
if(l<=tree[k].l&&tree[k].r<=r) return tree[k].b;
LL tot=0,mid=(tree[k].l+tree[k].r)>>1;
if(l<=mid) tot=queryb(tree[k].lc,l,r);
if(r>mid) {
tot=(tot*queryk(tree[k].rc,l,r)%mod+queryb(tree[k].rc,l,r))%mod;
}
return tot;
}
int main()
{
freopen("fx.in","r",stdin);
freopen("fx.out","w",stdout);
int x,y,z;char ch;
n=read(),m=read();
build(1,n);
while(m--)
{
cin>>ch;
x=read(),y=read(),z=read();
if(ch=='M') add(1,x,y,z);
else
{
LL p=queryk(1,x,y),q=queryb(1,x,y);
printf("%lld\n",(p*z%mod+q)%mod);
}
}
return 0;
}

NOIP 模拟赛 那些年,我们学过的文化课 --致已退役的fqk神犇.的更多相关文章

  1. 2017-9-22 NOIP模拟赛[xxy][数论]

    XXY 的 的 NOIP 模拟赛 4 4 —— 数学专场 A Description定义 f(x)表示 x 的约数和,例:f(12)=1+2+3+4+6+12=28给出 x,y,求Σf(i),i∈[x ...

  2. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  3. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  4. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  5. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

  6. 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...

  7. 队爷的Au Plan CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的Au%20Plan 题解:看了题之后觉得肯定是DP ...

  8. 队爷的新书 CH Round #59 - OrzCC杯NOIP模拟赛day1

    题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的新书 题解:看到这题就想到了 poetize 的封 ...

  9. CH Round #58 - OrzCC杯noip模拟赛day2

    A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...

随机推荐

  1. Java 时间不一致

    1.new Date() 得到的时间?和系统相差 相差8个小时 2.eclipse控制台打印的时间与系统相差 相差8个小时 3.log4j日志的时间与与系统相差 相差8个小时 上述问题其实是同一个问题 ...

  2. 【js】clientY pageY screenY layerY offsetY的区别

    clientY 指的是距离可视页面左上角的距离 pageY 指的是距离可视页面左上角的距离(不受页面滚动影响) screenY 指的是距离屏幕左上角的距离 layerY 指的是找到它或它父级元素中最近 ...

  3. 浅读vuex源码,了解vuex基本原理

    极简版vuex代码 class KVuex { constructor (options) { this.state = options.state this.mutations = options. ...

  4. XVS 操作

    1. xvs安装   rpm -i  ***.rpm 2.获取license root@ubuntu:/usr/local/xvs# ./xvs -L .Host ID: 16b3d720584704 ...

  5. mintUI和mUI

    mintUI 安装: npm install mint-ui -S 引入: // 按需引入部分组件 import { Cell, Checklist } from 'mint-ui'; Vue.com ...

  6. AxMath_V2.5.0.0安装和激活

    目录 1. 相关推荐 2. 按 3. AxMath 功能与特色 4. 软件介绍 4.1. 编辑与排版 4.2. 科学计算功能 4.3. 输出与发布 4.4. 运行环境 4.5. 破解说明 5. 安装步 ...

  7. pam_smb

    What is pam_smb? pam_smb is a PAM module/server which allows authentication of UNIX users using an N ...

  8. CentOS7安装node环境

    1 找到官网复制链接地址 2 再自己Linux的按照路径,wget下载软件包并解压 wget https://nodejs.org/dist/v10.16.1/node-v10.16.1-linux- ...

  9. 在MDK 中忽略(suppress) 某一个警告

    文章转载自:http://www.51hei.com/bbs/dpj-29515-1.html 有时候我们需要在MDK中忽略掉某一个具体的warnning,怎么做呢? 只需在Misc Control中 ...

  10. docker 运行centos显示连不上网络

    centos 7 docker 启动了一个web服务 但是启动时 报 WARNING: IPv4 forwarding is disabled. Networking will not work. 网 ...