首页 > 其他分享 >CSP-S模拟18

CSP-S模拟18

时间:2022-10-12 20:33:58浏览次数:55  
标签:int 18 top long ans now CSP 模拟 define

先放个代码,等改完T3再写思路

代码
#include<bits/stdc++.h>
#define re register
#define ll long long
#define ull unsigned long long 
using namespace std;
inline int read()
{
    int x = 0, f = 0; char c = getchar();
    while(c < '0') f |= (c == '-'), c = getchar();
    while(c >= '0') x = (x << 1) + (x << 3) + (c & 15), c = getchar();
    return f ? -x : x;
}

int T;
ll L, R;
int sta[100], top;

int main()
{
    T = read();
    while(T--)
    {
        L = read(), R = read();
        ll cnt = 1, now = 10;
        while(R >= now) ++cnt, now *= 10;
        now /= 10;
        if(R / now > 1)
        {
            printf("%lld\n", min(R - L + 1, R - now + 1));
        }else
        {
            top = 0;
            ll tmp = R;
            while(tmp) sta[++top] = tmp % 10, tmp /= 10;
            for(re int i = top; i >= 1; --i)
            {
                if(sta[i] > 1)
                {
                    printf("%lld\n", min(R - L + 1, now));
                    break;
                }else if(sta[i] == 0)
                {
                    printf("%lld\n", min(R - L + 1, R - R / 10));
                    break;
                }else if(i == 1)
                {
                    printf("%lld\n", min(R - L + 1, now));
                    break;
                }
            }  
        }
    }

    return 0;
}
代码
#include<bits/stdc++.h>
#define re register
#define ll long long
#define ull unsigned long long 
using namespace std;
inline int read()
{
    int x = 0, f = 0; char c = getchar();
    while(c < '0') f |= (c == '-'), c = getchar();
    while(c >= '0') x = (x << 1) + (x << 3) + (c & 15), c = getchar();
    return f ? -x : x;
}

const int N = 1e5 + 10;
int n;
ll V;
ll a[N];
ll ans = 0x7ffffffffffffff;

priority_queue< pair<ll, int> > l, r;

int main()
{

    double be = clock();

    n = read(), V = read();
    for(re int i = 1; i <= n; ++i)
    {
        a[i] = read();
        l.push(pair<ll, int>(a[i], i));
        r.push(pair<ll, int>(-a[i], i));
    }

    ans = min(ans, l.top().first + r.top().first );

    while(clock() - be <= 950000)
    {
        for(re int i = 1; i <= 32; ++i)
        {
            ll tmp = -r.top().first , id = r.top().second ;

            if(tmp * 2ll + V < tmp)
            {
                printf("%lld\n", ans);
                return 0;
            }
            tmp = tmp * 2ll + V;
            a[id] *= 2ll;
            l.push(pair<ll, int>(a[id], id));
            r.pop();
            r.push(pair<ll, int>(-tmp, id));

            if(l.top().second == r.top().second )
            {
                ll now = l.top().first ;
                l.pop();
                ans = min(ans, l.top().first + r.top().first );
                l.push(pair<ll, int>(now, r.top().second ));
            }else ans = min(ans, l.top().first + r.top().first );
            if(ans <= 0)
            {
                printf("0");
                return 0;
            }
        }
    }

    printf("%lld\n", max(ans, 0ll));

    return 0;
}
代码
#include<bits/stdc++.h>
#define re register
#define ll long long
#define ull unsigned long long 
using namespace std;
inline int read()
{
    int x = 0, f = 0; char c = getchar();
    while(c < '0') f |= (c == '-'), c = getchar();
    while(c >= '0') x = (x << 1) + (x << 3) + (c & 15), c = getchar();
    return f ? -x : x;
}

const int mod = 998244353;
const int N = 1e5 + 10;
int n, K, W, a[N];

ll d[N][6], C[6][6];
ll D[6][6];

#define ls(x) (x << 1)
#define rs(x) (x << 1 | 1)
ll sum[N << 2], cnt[N << 2][6][6], f[N << 2][6];

void pushup(int k)
{
    sum[k] = sum[ls(k)] + sum[rs(k)];

    for(re int x = 0; x <= W - 1; ++x)
    {
        for(re int y = 0; y <= W - 1; ++y)
        {
            cnt[k][x][y] = cnt[ls(k)][x][y];
        }
        for(re int y = 0; y <= W - 1; ++y)
        {
            cnt[k][x][(y + sum[ls(k)]) % W] += cnt[rs(k)][x][y];
        }
    }

    for(re int t = 0; t <= K; ++t)
    {
        f[k][t] = f[ls(k)][t];
        for(re int x = 0; x <= t; ++x)
        {
            (f[k][t] += f[rs(k)][x] * d[sum[ls(k)]][t - x] % mod * C[t][x] % mod) %= mod;
        }
    }
}

void motify(int p, int l, int r, ll pos, int val)
{
    if(l == r)
    {
        if(val == 1)
        {
            ++sum[p];
            ++cnt[p][pos % W][sum[p] % W];

            for(re int t = 0; t <= K; ++t)
            {
                f[p][t] = (f[p][t] + pos * d[sum[p]][t] % mod) % mod;
            }
        }else
        {
            for(re int t = 0; t <= K; ++t)
            {
                f[p][t] = (f[p][t] - pos * d[sum[p]][t] % mod) % mod;
            }

            --cnt[p][pos % W][sum[p] % W];
            --sum[p];
        }
        return ;
    }

    int mid = (l + r) >> 1;
    if(pos <= mid) motify(ls(p), l, mid, pos, val);
    else motify(rs(p), mid + 1, r, pos, val);

    pushup(p);
}

ll qpow(ll a, ll b, ll mod)
{
    ll ans = 1;
    while(b)
    {
        if(b & 1) ans = ans * a % mod;
        b >>= 1;
        a = a * a % mod;
    }
    return ans;
}

int main()
{
    for(re int i = 0; i <= 5; ++i)
    {
        C[i][0] = 1;
        for(re int j = 1; j <= i; ++j)
        {
            C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
        }
    }

    for(re ll i = 0; i <= 1e5; ++i)
    {
        d[i][0] = 1;
        for(re int j = 1; j <= 5; ++j)
        {
            d[i][j] = d[i][j - 1] * i % mod;
        }
    }

    n = read(), K = read(), W = read();

    for(re ll i = 0; i <= 5; ++i)
    {
        D[i][0] = 1;
        for(re int j = 1; j <= 5; ++j)
        {
            D[i][j] = D[i][j - 1] * i % W;
        }
    }

    for(re int i = 1; i <= n; ++i)
    {
        a[i] = read();
        motify(1, 0, 1e5, a[i], 1);
    }

    ll inv = qpow(W, mod - 2, mod);

    int q = read();
    for(re int i = 1; i <= q; ++i)
    {
        int pos = read(), x = read();
        motify(1, 0, 1e5, a[pos], -1);
        a[pos] = x;
        motify(1, 0, 1e5, a[pos], 1);

        ll ans = f[1][K];
        for(re ll x = 0; x <= W - 1; ++x)
        {
            for(re int y = 0; y <= W - 1; ++y)
            {
                ans -= x * D[y][K] % W * cnt[1][x][y] % mod;
            }
        }

        ans = (ans % mod + mod) % mod;
        printf("%lld\n", ans * inv % mod);
    }

    return 0;
}

标签:int,18,top,long,ans,now,CSP,模拟,define
From: https://www.cnblogs.com/wenqizhi1125/p/16785851.html

相关文章

  • 10.12 搜索枚举模拟赛总结
    远古遗迹t2196行调了2h+,T3来不及写期望得分:100+100+0+100=300实际得分:0+100+0+0=100多测分类讨论,T1其中一种情况输出不换行。T4其中一种情况让输出tf我输出01......
  • 2022 CSP-S 游记
    \(9.26\):开坑。没报J组主要是因为J比较垃圾,去抢小朋友的一等没什么意思。初赛刚拿到试卷就直接懵了,这tm是给人做的题?宇宙射线是什么奇妙东西,还有基数排序我根本不......
  • CSP-S模拟18
    再次模拟退役,最近心态又双叒叕有点炸。。。。实力确实也真不行A.最长反链猜结论,从大到小能选就选,然后打表发现能选与不能选有明显的分界,于是直接二分答案然后因为判断......
  • Python 为什么要在 18 年前引入布尔类型?且与 C、C++ 和 Java 都不同?
    花下猫语:在上一篇《​​Python为什么能支持任意的真值判断?​​》文章中,我们分析了Python在真值判断时的底层实现,可以看出Python在对待布尔值时,采用了比较宽泛的态度。......
  • 汉源高科16GE+2GSFP机架式全千兆网管型工业以太网交换机18口全千兆二层网管型工业以太
    HY5700-752GX16GT机架式千兆网管型工业以太网交换机,提供16个10/100/1000M自适应以太网接口,4个100/1000M自适应SFP光口。HY5700-752GX16GT可以组建一个快速恢复的自愈环网,自......
  • 国标GB28181视频平台EasyGBS设备录像下载文件为ps格式,如何改为MP4格式?
    EasyGBS是基于国标GB/T28181协议的视频云服务平台,不仅支持无缝、完整接入内网或者公网的国标设备,在输出上,提供RTSP、RTMP、FLV、HLS、WebRTC等多种格式视频流的分发服务,实现......
  • 我,加盟卖煲仔饭,18个月回本却还是被“算计”了
    文|螳螂观察作者|青月三年疫情,实体哀嚎遍野。不过,国家统计局数据显示,2022年6月社会消费品零售总额约为3.9万亿元,同比增长3.1%。其中,网上实物商品零售额约为1.2万亿元,同比增......
  • 【人脸表情识别】情绪识别相关会议、比赛汇总(2018-2020)
    前面专栏中,我们介绍了有关基于图片/视频的人脸表情识别的相关内容,也了解了通过回归的方式来理解表情的方式——基于连续模型的人脸表情识别。在专栏的最后一篇文章中,我们将......
  • 2022 CSP-S 游记
    死去的我又回来了因为某浏览器使得我写不了博客(一直时间错误)今年打提高((普及都没打利索的我又来霍霍提高了今年不拿奖我可能就AFO了……一群高二学长学姐中夹杂的一名......
  • 18.设计模式-模板方法
    //1.定义模板抽象父类,将特有的业务定义为抽象方法,定义钩子函数//2.子类继承抽象父类,实现抽象方法//3.测试publicabstractclassCake{//定义成final,禁止子类重写......