CF133B Unary 题解

题面

在考虑如何优化程序时,不要忽略了这题的纯暴力做法。

对于样例 2

此处样例 2 的输入应该是 ++++[>,.<-],也许是翻译问题,但并不重要。

思路

依据题意,将输入的字符串 \(s\) 转为其对应的二进制串 \(str\),在暴力将 \(str\) 由二进制转为十进制即可。

代码

为了防止因为幂运算而超时,这里使用了快速幂,虽然并没有快多少

#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cstring>
#include<algorithm>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<stdio.h>
#define ll long long
#define inf 0x3f3f3f3f
#define fr(i , a , b) for(ll i = a ; i <= b ; ++i)
#define fo(i , a , b) for(ll i = a ; i >= b ; --i)
using namespace std;
inline char gchar()
{
    static char buf[1000000] , *p1 = buf , *p2 = buf;
    return p1 == p2 && (p2 = (p1 = buf) + fread(buf , 1 , 1000000 , stdin) , p1 == p2) ? EOF : *p1++;
}
inline ll read()
{
    ll 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 << 1) + (x << 3) + (ch ^ 48);
        ch = getchar();
    }
    return x * f;
}
string s;
string str;
#define mod 1000003
ll a , b , sum;
inline ll quickPower(ll a , ll b)
{
	ll ans = 1, base = a;
	while(b > 0)
    {
		if(b & 1)
		{
			ans *= base;
			ans %= mod;
		}
        base *= base;
        base %= mod;
		b >>= 1;
	}
	return ans;
}
signed main()
{
    cin >> s;
    fr(i , 0 , s.size() - 1)
    {
        if(s[i] == '>')
        {
            str += "1000";
        }
        else if(s[i] == '<')
        {
            str += "1001";
        }
        else if(s[i] == '+')
        {
            str += "1010";
        }
        else if(s[i] == '-')
        {
            str += "1011";
        }
        else if(s[i] == '.')
        {
            str += "1100";
        }
        else if(s[i] == ',')
        {
            str += "1101";
        }
        else if(s[i] == '[')
        {
            str += "1110";
        }
        else if(s[i] == ']')
        {
            str += "1111";
        }
    }
    ll o = 0;
    // cout << str << endl;
    fo(i , str.size() - 1 , 0)
    {
        ll kkk = str[i] - '0';
        sum += kkk * quickPower(2 , o) % mod;
        o++;
    }
    printf("%lld" , sum % mod);
    system("pause");
    return 0;
}
posted @ 2024-04-10 17:46  心海秋的墨木仄  阅读(4)  评论(0编辑  收藏  举报