zoukankan      html  css  js  c++  java
  • 1109 NOIP 模拟考试

    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 。
    【时空限制】
    对于每个测试点,时间限制为  1 s,空间限制为  512MB 。

     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 inline const int read(){
     5     register int x=0,f=1;
     6     register char ch=getchar();
     7     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
     8     while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
     9     return x*f;
    10 }
    11 const int N=1e5+10;
    12 int n,m,k,xx[N],yy[N];
    13 #define name "word"
    14 int main(){
    15     freopen(name".in","r",stdin);
    16     freopen(name".out","w",stdout);
    17     n=read();m=read();k=read();
    18     for(int i=1,opt,pos;i<=k;i++){
    19         opt=read();pos=read();
    20         if(opt==1){
    21             xx[pos]=i;
    22         }
    23         else{
    24             yy[pos]=i;
    25         }
    26     }
    27     for(int i=1;i<=n;i++){
    28         for(int j=1;j<=m;j++){
    29             printf("%d ",max(xx[i],yy[j]));
    30         }
    31         printf("
    ");
    32     }
    33     fclose(stdin);
    34     fclose(stdout);
    35     return 0;
    36 } 

    脱水缩合
    (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 。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #define maxn 110
     5 using namespace std;
     6 int f[maxn][maxn][maxn],ans,r[maxn],n,m;bool vis[500010];
     7 char s[5],c[5];
     8 void dfs(int now,int x,int y)
     9 {
    10     if(now==n+1)
    11     {
    12         if(x!=1) return ;
    13         int mx=0;
    14         for(int i=1;i<=n;i++)// Hash判重 
    15             mx=mx*6+r[i];
    16         if(vis[mx]) return;
    17         vis[mx]=1;
    18         ans++; return;
    19     }
    20     for(int i=1;i<=6;i++)
    21       if(f[x][y][i]) dfs(now+1,i,r[now+1]);
    22 }
    23 void Dfs(int now)
    24 {
    25     if(now==n+1)
    26     {
    27         dfs(2,r[1],r[2]);
    28         return ;
    29     }
    30     for(int i=1;i<=6;i++)
    31     {
    32         r[now]=i;
    33         Dfs(now+1);
    34         r[now]=0;
    35     }
    36 }
    37 int main()
    38 {
    39     freopen("merge.in","r",stdin);
    40     freopen("merge.out","w",stdout);
    41     scanf("%d%d",&n,&m);
    42     for(int i=1;i<=m;i++)
    43     {
    44         int x,y,z;
    45         scanf("%s%s",s,c);
    46         x=s[0]-'a'+1;y=s[1]-'a'+1;z=c[0]-'a'+1;
    47         f[x][y][z]=1;
    48     }
    49     Dfs(1);
    50     printf("%d
    ",ans);
    51     fclose(stdin);
    52     fclose(stdout);
    53     return 0;
    54 }
  • 相关阅读:
    动态生成 Excel 文件供浏览器下载的注意事项
    JavaEE 中无用技术之 JNDI
    CSDN 泄露用户密码给我们什么启示
    刚发布新的 web 单点登录系统,欢迎下载试用,欢迎提建议
    jQuery jqgrid 对含特殊字符 json 数据的 Java 处理方法
    一个 SQL 同时验证帐号是否存在、密码是否正确
    PostgreSQL 数据库在 Windows Server 2008 上安装注意事项
    快速点评 Spring Struts Hibernate
    Apache NIO 框架 Mina 使用中出现 too many open files 问题的解决办法
    解决 jQuery 版本升级过程中出现 toLowerCase 错误 更改 doctype
  • 原文地址:https://www.cnblogs.com/suishiguang/p/6048297.html
Copyright © 2011-2022 走看看