• Codeforces Round #355 (Div. 2) C 预处理


    C. Vanya and Label
    time limit per test
    1 second
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    While walking down the street Vanya saw a label "Hide&Seek". Because he is a programmer, he used & as a bitwise AND for these two words represented as a integers in base 64 and got new word. Now Vanya thinks of some string s and wants to know the number of pairs of words of length |s| (length of s), such that their bitwise AND is equal to s. As this number can be large, output it modulo 109 + 7.

    To represent the string as a number in numeral system with base 64 Vanya uses the following rules:

    • digits from '0' to '9' correspond to integers from 0 to 9;
    • letters from 'A' to 'Z' correspond to integers from 10 to 35;
    • letters from 'a' to 'z' correspond to integers from 36 to 61;
    • letter '-' correspond to integer 62;
    • letter '_' correspond to integer 63.
    Input

    The only line of the input contains a single word s (1 ≤ |s| ≤ 100 000), consisting of digits, lowercase and uppercase English letters, characters '-' and '_'.

    Output

    Print a single integer — the number of possible pairs of words, such that their bitwise AND is equal to string s modulo 109 + 7.

    Examples
    input
    z
    output
    3
    input
    V_V
    output
    9
    input
    Codeforces
    output
    130653412
    Note

    For a detailed definition of bitwise AND we recommend to take a look in the corresponding article in Wikipedia.

    In the first sample, there are 3 possible solutions:

    1. z&_ = 61&63 = 61 = z
    2. _&z = 63&61 = 61 = z
    3. z&z = 61&61 = 61 = z

    题意:不同字符表示0~63   给你一个字符串判断 有多少对 长度相同的字符串的 &运算的结果 为所给的字符串

    题解:模拟

           1&1=1   0&1=0  1&0=0  0&0=0

           打表预处理 0~63的满足情况的对数

           例如31=(11111)2

           共有三对    111111&011111

                          011111&111111

                          011111&011111

          结果乘积并取模

                     

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<queue>
     5 #include<stack>
     6 #include<cmath>
     7 #include<map>
     8 #define ll __int64 
     9 #define pi acos(-1.0)
    10 #define mod 1000000007
    11 using namespace std;
    12 map<char,int> mp;
    13 ll a[100];
    14 char b[100005];
    15 ll quickmod(ll a,ll b)
    16 {
    17     ll sum=1;
    18     while(b)
    19     {
    20         if(b&1)
    21             sum=(sum*a%mod);
    22         b>>=1;
    23         a=(a*a%mod);
    24     }
    25     return sum;
    26 }
    27 void init ()
    28 {
    29     for(int i=0;i<=63;i++)
    30     {
    31         int n=i;
    32         int c=0;
    33          while (n >0)
    34       {
    35          if((n &1) ==1) 
    36             ++c ; 
    37          n >>=1 ; 
    38       }
    39       a[i]=quickmod(3,6-c);
    40     }
    41     int jishu=0;
    42     for(int i='0';i<='9';i++)
    43      {
    44       mp[i]=a[jishu];
    45       jishu++;
    46       }
    47     for(int i='A';i<='Z';i++)
    48     {
    49       mp[i]=a[jishu];
    50       jishu++;
    51     }
    52     for(int i='a';i<='z';i++)
    53       {
    54       mp[i]=a[jishu];
    55       jishu++;
    56       }
    57     mp['-']=a[62];
    58     mp['_']=a[63];
    59 }
    60 int main()
    61 {
    62     init();
    63     ll ans=1;
    64     scanf("%s",b);
    65     int len=strlen(b);
    66     for(int i=0;i<len;i++)
    67         ans=(ans%mod*mp[b[i]])%mod;
    68     cout<<ans<<endl;
    69     return 0;
    70 }
  • 相关阅读:
    mysql 优化
    二叉查找树(BST)、红黑树、B-树、B+树
    HashMap,ConcurrentHashMap 原理分析
    2019_京东JAVA实习生招聘机试第一题
    2019年今日头条机试_JAVA后台岗_第二题
    2019年今日头条机试_JAVA后台岗_第一题
    C++_pthread read-write lock_读写锁_visual studio 2015下配置
    Winsock2_WSADATA
    leetcode_1011. Capacity To Ship Packages Within D Days_binary search二分
    leetcode_684. Redundant Connection
  • 原文地址:https://www.cnblogs.com/hsd-/p/5551670.html
Copyright © 2020-2023  润新知