• CodePlus 2017 12 月赛


    这场比赛跟个zz一样 div1卡在了同余方程上 心态崩了去做div2 然后被T1搞崩了

    T1:

    大模拟

    比较像配平方程式

    思路:

    但是未知物质每种元素系数不能≥10 且不能为空 (如CO2+?=CO2)

    没考虑以上两种情况调了好久也没对 心态爆炸

    loj 6255

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

    T2:

    考试的时候根本没看orz

    这个问题是这样的:

    对于任何一个n阶方阵,若任意从其中选择n个不同行不同列的位置,其上的权值之和均相等,则我们称这个矩阵是巧妙的。注意对于n=1的任何矩阵都是巧妙的

    例如矩阵egin{matrix}1&2&3\4&5&6\7&8&9end{matrix}是巧妙的,因为1+5+9=1+6+8=2+4+9=2+6+7=3+5+7=3+4+8=15

    而矩阵egin{matrix}1&2\2&1end{matrix}不巧妙,因为1+1≠2+2

    现在有一个n×m大小的矩阵M以及T个询问,每次询问其一个子方阵是否是巧妙的

    思路:

    通过一些例子发现

    只有一个矩阵内所有二阶矩阵都为巧妙矩阵是,该矩阵为巧妙矩阵

    然后一个二维前缀和就行了

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<cstdlib>
     5 #include<cstring>
     6 #include<algorithm>
     7 #include<vector>
     8 #include<queue>
     9 #define inf 2139062143
    10 #define ll long long
    11 #define MAXN 510
    12 using namespace std;
    13 inline int read()
    14 {
    15     int x=0,f=1;char ch=getchar();
    16     while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
    17     while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
    18     return x*f;
    19 }
    20 int n,m,mp[MAXN][MAXN],Q;
    21 int s[MAXN][MAXN];
    22 int main()
    23 {
    24     n=read(),m=read();int a,b,c;
    25     Q=read();
    26     for(int i=1;i<=n;i++) 
    27         for(int j=1;j<=m;j++)
    28             mp[i][j]=read();
    29     for(int i=2;i<=n;i++)
    30         for(int j=2;j<=m;j++)
    31             s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+(mp[i][j]+mp[i-1][j-1]==mp[i][j-1]+mp[i-1][j]);
    32     while(Q--)
    33     {
    34         a=read(),b=read(),c=read();
    35         printf("%c
    ",s[a+c-1][b+c-1]-s[a+c-1][b]-s[a][b+c-1]+s[a][b]==(c-1)*(c-1)?'Y':'N');
    36     }
    37 }
    View Code

    T3:

    若一个数列a满足条件a[n]=a[n-1]+a[n-2],n >=3,而a1 a2 为任意实数,则我们称这个数列为广义斐波那契数列

    现在请你求出满足条件a1​​=i,a2​​为区间[l,r]中的整数,且amod p=m 的广义斐波那契数列有多少个

    思路:

    可以通过fibonacci+矩阵加速求出ak

    然后将问题转化为一个同余方程 使用exgcd解决

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<cstdlib>
     5 #include<cstring>
     6 #include<algorithm>
     7 #include<vector>
     8 #include<queue>
     9 #define inf 2139062143
    10 #define ll long long
    11 #define MAXN 510
    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*10+ch-'0';ch=getchar();}
    18     return x*f;
    19 }
    20 ll MOD;
    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)%=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 ll exgcd(ll a,ll b,ll &x,ll &y)
    48 {  
    49      if(b==0) {x=1;y=0;return a;}
    50      ll d=exgcd(b,a%b,y,x);
    51      y-=a/b*x;
    52      return d;
    53 }
    54 ll solve(ll a,ll b)
    55 {
    56     ll x,y;
    57     ll gcd=exgcd(a,MOD,x,y);
    58     if(b%gcd) return -1;
    59     x*=b/gcd,MOD/=gcd;
    60     if(MOD<0) MOD=-MOD;
    61     ll res=x%MOD;
    62     if(res<=0) res+=MOD;
    63     return res;
    64 }
    65 int main()
    66 {
    67     ll T,a,b,l,r,m,res,ans,n;
    68     T=read();
    69     while(T--)
    70     {
    71         a=read(),l=read(),r=read(),n=read(),MOD=read(),m=read(),a%=MOD;
    72         (a*=q_pow(n-2))%=MOD,b=q_pow(n-1);
    73         m=(m-a+MOD)%MOD;
    74         res=solve(b,m);
    75         if(res==-1) {puts("0");continue;}
    76         if(r<res) {puts("0");continue;}
    77         ans=(r-res)/MOD+1;
    78         if(l>res) {ans-=(l-res)/MOD+1;if((l-res)%MOD==0) ans++;}
    79         printf("%lld
    ",ans);
    80     }
    81 }
    View Code
  • 相关阅读:
    qt creator中输入中文中文变繁体
    Trie
    pycharm 专业版的 django功能
    fzu 1533
    django使用问题记录
    查看SQLServer最耗资源时间的SQL语句
    从mysql数据库删除重复记录只保留其中一条(保留id最小的一条)
    使用CSS3的appearance属性改变元素的外观
    mysql中将多行数据合并成一行数据
    MySQL字符串的拼接、截取、替换、查找位置
  • 原文地址:https://www.cnblogs.com/yyc-jack-0920/p/8118450.html
Copyright © 2020-2023  润新知