• 【BestCoder #45】


    用家里的电脑来编程,各种不算

    一开始15分钟刷掉T1和T2,然后就永远地卡在了T3。。。

    后来看题解,傻了眼。。。

    它强调的“只有一个答案”我还以为这是在提示我二分答案,于是我一直往权值线段树那个方向想去

    哪知它还代表一个意思:路径xor值即是答案。。。

    好吧我脑袋秀逗了。。

    代码:

    T1

    #include <cstdio>
    #include <cstring>
    #include <cctype>
    #include <algorithm>
    #define rep(i, l, r) for(int i=l; i<=r; i++)
    #define maxn 10009
    #define ll long long
    using namespace std;
    ll read()
    {
        ll x=0, f=1; char ch=getchar();
        while (!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
        while (isdigit(ch)) x=x*10+ch-'0', ch=getchar();
        return x*f;
    }
    ll n;
    int main()
    {
        int t=read(); while(t--)
        {
            n=read(); int a=0, b=0;
            while (n)
            {
                if (a==0 && (n&1)==1) b++;
                a=n&1; n>>=1;
            }
            printf("%d
    ", b);
        }
        return 0;
    }

    T2

    #include <cstdio>
    #include <cstring>
    #include <cctype>
    #include <algorithm>
    #define rep(i, l, r) for(int i=l; i<=r; i++)
    #define maxn 1009
    #define maxq 100009
    #define lowbit(x) (x&-x)
    #define ll long long
    using namespace std;
    ll read()
    {
        ll x=0, f=1; char ch=getchar();
        while (!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();}
        while (isdigit(ch)) x=x*10+ch-'0', ch=getchar();
        return x*f;
    }
    struct node{int x,y,z,w;} t[maxq];
    int n, q, k[maxn], num[maxn], s[maxn];
    bool cmp(node a, node b){return a.x<b.x;};
    bool cmp2(node a, node b){return a.w<b.w;};
    void Add(int x, int v)
    {
        while (x<=n) s[x]+=v, x+=lowbit(x);
    }
    int Que(int x)
    {
        int now=0;
        while (x>0) now+=s[x], x-=lowbit(x);
        return now;
    }
    int main()
    {
        n=read(), q=read();
        rep(i, 1, n) k[i]=read();
        rep(i, 1, q) t[i].x=read(), t[i].y=read(), t[i].w=i; sort(t+1, t+1+q, cmp);
        rep(i, 1, n) rep(j, 1, i-1) if (k[j]>k[i]) num[i]++;
        rep(i, 1, n) Add(i, num[i]);
        int now=1;
        rep(o, 1, q)
        {
            while (now<t[o].x) 
            {
                rep(i, now+1, n) if (k[now]>k[i]) Add(i, -1);
                now++;
            }
            t[o].z=Que(t[o].y);
        }
        sort(t+1, t+1+q, cmp2);
        rep(i, 1, q) printf("%d
    ", t[i].z);
        return 0;
    }

    题解:

    1001 Dylans loves numbers
    这道题就是按照题意模拟。
    设读入的数是N,我们先把N分解成二进制形式放在数组A里。(正反顺序没有关系)
    然后对A数组循环一边,如果当前位置是1而前一位是0那么计数器就++。注意一些小的细节。
    时间复杂度为O(T∗log(N))

    1002 Dylans loves sequence
    N只有1000,于是想怎么来就怎么来。
    最容易想到的是枚举开头,然后Nlog(N)时间里去算逆序对,用一个树状数组维护。
    (可惜BC不给卡。。。呜呜呜)
    仔细一想发现可以很简单地做到N2.
    设ans[l][r]为l∼r的逆序对数量。首先我们暴力地先算好ans[1][1..N]。
    然后i从2∼N枚举,每次计算从i开始的逆序对。
    那么ans[i][j]比ans[i−1][j]少了什么呢?没错,少了a[i−1]这个数的贡献。
    我们再开一个累加器cnt。枚举j从i∼N,如果a[i−1]和a[j]产生逆序对就cnt[j]=−1
    然后我们从右往左累加cnt(因为贡献是前缀和性质的)
    最后ans[i][j]=ans[i−1][j]+cnt[j]。
    预处理完所有的答案就可以O(1)的询问啦。

    1003 Dylans loves tree
    题目里有一个很神奇的性质:路径上最多只有一个数出现奇数次。
    这应该马上想到异或。因为异或两次和没异或是等价的。此外异或满足区间减性质。
    因为有修改,我们很自然地想到用数据结构维护。
    最无脑的就是直接上树链剖分或是Splay维护区间xor值即可。
    仔细想一想,发现可以利用LCA消去“树上路径”,转化为根到x路径上求xor值。
    我们可以很经典地直接使用线段树或树状数组维护dfs序。
    (然而BC不给我卡log2。。。呜呜呜)
    有一个很强的trick就是权值可以为0!
    所以比如路径上有3个0,虽然他们xor值还是0,但是他们是出现了奇数次。
    我特意把A[i]说成∈自然数集而不是[0,100000],就是想尽量不被发现。
    怎么避免呢?单独维护0的情况?
    有一个很简单的解决方案:直接把读入时所有权值+1,输出的时候再-1即可!
    时间复杂度为O(N∗log(N)2)或者O(N∗log(N))

    1004 Dylans loves polynomial
    n的范围3000。考虑多项式插值的方法。
    因为是对子串进行插值,我们很自然地想到牛顿插值。(如果不会请自行百度)。
    那么只需先预处理一个3000∗3000的差商表,然后每次询问就能O(N)的读取对角线上的差商,那么问题就解决了。
    时间复杂度为O(N2+NQ)
    当然出完题后我还脑补出了一个n^2的拉格朗日的方法。
    不过细节有点多,要搞一些前缀积、后缀积来维护,这里不再叙述。

    吐槽:验题人说题目有点难,本次出题1002的idea换了好几次,然后基本是1002换成1003,1003换成了1004。(也就是说还有一道有趣的题目未能出出来)
    然后大家在Clarification里大量询问C题是否有负和0点权,这给一些同学提了醒~

  • 相关阅读:
    .net的Timer
    WPF笔记(9)模板(Template)
    WPF笔记(6)数据绑定(DataBinding)
    WPF笔记(8)样式(Styles)
    WPF笔记(7)资源(Resources)
    程序无法退出调试
    WPF笔记(1)XAML和code概述
    ASP.NET程序中常用编程代码(1)
    在ASP.NET中防止注入攻击
    ASP.NET程序中常用编程代码(2)
  • 原文地址:https://www.cnblogs.com/NanoApe/p/4591052.html
Copyright © 2020-2023  润新知