2020多校第五场Boring Game

思路

对于每次展开,挑选当前最中间的位置作为 mid ,将上半段翻转一下贴到下半段的左边,直接用 vector 暴力维护整个过程。

代码

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cstring>

#define ll long long
using namespace std;
const int maxn=6e6+6;
const int N = 1e6+5;
const ll mod=998244353;
const ll MOD=998244353;

ll power(ll x,ll a)
{
    ll ans=1;
    while(a)
    {
        if(a&1)
        {
            ans=ans*x%mod;
        }
        x=x*x%mod;
        a>>=1;
    }
    return ans;
}
ll a,b,ans;
char optr;
int base;
bool isop(char c)
{
    if(c=='+'||c=='-'||c=='*'||c=='/'||c=='=')
        return 1;
    else
        return 0;
}
int getn(char c)
{
    if(c>='A')
        return c-'A'+10;
    else
        return c-'0';
}
void fun(string s)
{
    a=0;
    b=0;
    ans=0;
    int i;
    for(i=0; !isop(s[i]); i++)
    {
        a*=base;
        a+=getn(s[i]);
    }
    optr=s[i];
    for(i++; s[i]!='='; i++)
    {
        b*=base;
        b+=getn(s[i]);
    }
    for(i++; i<s.size(); i++)
    {
        //cout<<getn(s[i])<<' ';
        ans*=base;
        ans+=getn(s[i]);
    }
}
vector<int>node[N];

int main()
{
#ifndef ONLINE_JUDGE
//  freopen("data.in.txt","r",stdin);
//  freopen("data.out.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);
    int w;
    cin>>w;
    while(w--)
    {
        int n,k;
        scanf("%d%d",&n,&k);
        int limit=2*n*(1<<k);
        for(int i=1; i<=limit; i++)
            node[i].clear();
        for(int i=1; i<=limit; i++)
        {
            int num;
            scanf("%d",&num);
            node[i].push_back(num);
        }
        int mid=1;
        while(k--)
        {
            mid=mid+limit>>1;
            for(int j=mid+1; j<=limit; j++)
            {
                int pos=mid-(j-(mid+1));
                reverse(node[pos].begin(),node[pos].end());
                node[j].insert(node[j].begin(),node[pos].begin(),node[pos].end());
                node[pos].clear();
            }
        }
        bool first=true;
        for(int i=limit-2*n+1; i<=limit; i++)
            for(int j=0; j<node[i].size(); j++)
            {
                if(first)
                    first=false;
                else
                    putchar(' ');
                printf("%d",node[i][j]);
            }
        puts("");
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在 BoringSSL 中设置随机数,你可以使用 `RAND_set_rand_method` 函数来设置随机数生成器的实现。这个函数需要一个指向 `RAND_METHOD` 结构体的指针,这个结构体包含了用于生成、清除和添加随机数种子的函数。你可以使用 BoringSSL 提供的默认实现,也可以自己实现这个结构体来提供自定义的随机数生成方式。 示例代码如下: ``` #include <openssl/rand.h> RAND_METHOD fake_rand_method; int fake_rand_bytes(unsigned char *buf, int num) { // 在这里实现生成 num 个字节的随机数的逻辑 return 1; } void fake_rand_cleanup(void) { // 在这里实现清除随机数种子的逻辑 } int fake_rand_add(const void *buf, int num, double entropy) { // 在这里实现添加随机数种子的逻辑 return 1; } int fake_rand_status(void) { // 在这里实现返回随机数生成器的状态的逻辑 return 1; } int main() { fake_rand_method.bytes = fake_rand_bytes; fake_rand_method.cleanup = fake_rand_cleanup; fake_rand_method.add = fake_rand_add; fake_rand_method.status = fake_rand_status; RAND_set_rand_method(&fake_rand_method); // 现在 BoringSSL 会使用 fake_rand_method 中定义的函数来生成随机数 return 0; } ``` 注意,如果你使用的是 BoringSSL 的 C++ 封装(也就是 `boringssl::RAND` 类),那么你可以 ### 回答2: boringssl是一个用于加密和安全传输的开源软件库,其随机数的设置是非常重要的。 在boringssl中,可以通过以下步骤来设置随机数: 1. 初始化随机数引擎:首先,需要使用一个随机数引擎来生成随机数。boringssl使用Crypto::Rand类来生成随机数,可以通过调用Crypto::Rand::Init()函数来初始化随机数引擎。 2. 获取随机数:一旦随机数引擎被初始化,可以使用Crypto::Rand::Bytes()函数来获取指定长度的随机数。该函数将生成的随机数存储在指定的内存位置中。 3. 设置随机数回调函数:为了更好地控制随机数的生成过程,boringssl还提供了设置随机数回调函数的功能。可以通过调用CRYPTO_set_rand_bytes_callback()函数来设置随机数回调函数,该函数接受一个函数指针作为参数,用于指定随机数的生成方式。 通过以上步骤,可以在boringssl中设置随机数。这样做是为了确保加密算法中使用的随机数具有足够的随机性和安全性,以提高加密和安全传输的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值