• 11.8 模拟赛


     luogu 粲泽的小测试  #3  还可以 

    馒头太强啦 帮助我们写出了第三题

    T1:龙盘雪峰信息解析器

    模拟

    一个二进制串 每8个为一个单元

    按照一些奇怪的规则翻译

    主要是看情况讨论全不全

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cmath>
     5 #include<cstdlib>
     6 #include<cstring>
     7 #include<queue>
     8 #include<vector>
     9 #define ll long long
    10 #define MAXN 172111
    11 using namespace std;
    12 inline ll read()
    13 {
    14     ll x=0,f=1;char ch=getchar();
    15     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
    16     while(isdigit(ch)) {x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
    17     return x*f;
    18 }
    19 int len,k[8]={1,2,4,8,16,32,64,128},i,an[MAXN];
    20 char a[MAXN],ans[MAXN];
    21 int main()
    22 {
    23     scanf("%s",a);
    24     len=strlen(a);
    25     int tmp,k1;
    26     if(len%8) {printf("Error");return 0;}
    27     for(i=0;i<len;i++) {if(a[i]!='0'&&a[i]!='1'){printf("Error");return 0;}}
    28     for(i=0;i<len;i+=8)
    29     {
    30         if(a[i]=='1'&&a[i+1]=='1'&&a[i+2]=='1') {ans[i/8]=' ';continue;}
    31         if(a[i]=='1'&&a[i+1]=='0'&&a[i+2]=='1')
    32         {
    33             tmp=0;
    34             for(int j=i+3;j<i+8;j++) tmp+=(a[j]-'0')*k[i+7-j];
    35             if(tmp>25) break;
    36             else ans[i/8]=(char) 'A'+tmp;
    37             continue;
    38         }
    39         if(a[i]=='0')
    40         {
    41             if(a[i+8]!='0') break;
    42             tmp=k1=0;
    43             for(int j=i+1;j<i+8;j++)
    44                 tmp+=(a[j]-'0')*k[i+7-j];
    45             tmp/=2;
    46             for(int j=i+8;j<i+8+8;j++)
    47                 k1+=(a[j]-'0')*k[i+15-j];
    48             k1/=2;
    49             ans[i/8]=ans[i/8+1]='@';
    50             an[i/8]=tmp+k1,an[i/8+1]=-1;
    51             i+=8;
    52             continue;
    53         }
    54         break;
    55     }
    56     if(i==len) 
    57     {
    58         for(int j=0;j<len/8;j++) 
    59         {
    60             if(ans[j]!='@') printf("%c",ans[j]);
    61             else if(an[j]!=-1) printf("%d",an[j]);
    62         }
    63         return 0;
    64     }
    65     printf("Error");
    66 }
    View Code

    T2:赛斯石(赛后强化版)

    简单背包???

    但是因为dp数组有可能到long long挂掉了一个点

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cmath>
     5 #include<cstdlib>
     6 #include<cstring>
     7 #include<queue>
     8 #include<vector>
     9 #define ll long long
    10 #define MAXN 100100
    11 using namespace std;
    12 inline ll read()
    13 {
    14     ll x=0,f=1;char ch=getchar();
    15     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
    16     while(isdigit(ch)) {x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
    17     return x*f;
    18 }
    19 ll n,a[15],dp[MAXN],k[11]={0,1,3,5,7,10,15,16,18,21,23};
    20 int main()
    21 {
    22     n=read();
    23     for(int i=1;i<=10;i++) a[i]=read();
    24     for(int i=1;i<=n;i++)
    25         for(int j=min(i,10);j;j--)
    26             dp[i]=max(dp[i],dp[i-j]+a[j]-k[j]);
    27     printf("%lld",dp[n]);
    28 }
    View Code

    T3:琅泽难题

    一道找规律题

    通过打表发现出现的数只可能是Q 1 3 5 7

    其他数都不会出现  因为Q!=1 所以Q只会在最后出现

    同时通过打表发现3 5 7 的个数都跟fibonacci有着关系

    然后直接矩阵快速幂求fibonacci即可

    但是挂了一个点???

    因为最后答案是模数的倍数导致输出了-1

    这个人太强啦

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cmath>
     5 #include<cstdlib>
     6 #include<cstring>
     7 #include<queue>
     8 #include<vector>
     9 #define ll long long
    10 #define MAXN 2510
    11 #define MOD 20171111
    12 using namespace std;
    13 inline ll read()
    14 {
    15     ll x=0,f=1;char ch=getchar();
    16     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
    17     while(isdigit(ch)) {x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
    18     return x*f;
    19 }
    20 ll n,m,x,ans;
    21 struct mat {ll num[2][2];};  
    22 mat mul(mat x,mat y)  
    23 {  
    24     mat res;
    25     memset(res.num,0,sizeof(res.num));  
    26     for(ll i=0;i<2;i++)  
    27         for(ll j=0;j<2;j++)  
    28             for(ll k=0;k<2;k++)  
    29                 (res.num[i][j]+=x.num[i][k]*y.num[k][j])%=MOD;
    30     return res;
    31 }
    32 ll q_pow(ll n)
    33 {
    34     if(n<=0) return 0;
    35     mat t,res;
    36     memset(res.num,0,sizeof(res.num));
    37     t.num[0][0]=t.num[0][1]=t.num[1][0]=1,t.num[1][1]=0;
    38     res.num[0][0]=res.num[1][1]=1;
    39     while(n)
    40     {
    41         if(n&1) res=mul(res,t);
    42         t=mul(t,t);
    43         n>>=1;
    44     }  
    45     return res.num[0][1];
    46 }
    47 int main()
    48 {
    49     m=read(),n=read(),x=read();
    50     if(x==m) ans=1;
    51     if(x==3&&n>3) ans++;
    52     if(x==5) ans+=(q_pow(n/2)-1+MOD)%MOD;
    53     if(x==7) ans+=(q_pow(n/2-1)-1+MOD)%MOD;
    54     printf("%lld",ans);
    55 }
    View Code
  • 相关阅读:
    空间距离计算
    一种支持多种并行环境的栅格地理计算并行算子
    发布或重启线上服务时抖动问题解决方案
    jetty9优化的两处地方
    mysql空间扩展 VS PostGIS
    多流向算法GPU并行化
    GDAL并行I/O
    深入浅出空间索引:2
    深入浅出空间索引:为什么需要空间索引
    virtualBox中的centOS虚拟机硬盘扩容
  • 原文地址:https://www.cnblogs.com/yyc-jack-0920/p/7805885.html
Copyright © 2020-2023  润新知