• Wannafly挑战赛6


    完全平方数
    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 131072K,其他语言262144K
    64bit IO Format: %lld

    题目描述

    多次查询[l,r]范围内的完全平方数个数

    定义整数x为完全平方数当且仅当可以找到整数y使得y*y=x

    输入描述:

    第一行一个数n表示查询次数
    之后n行每行两个数l,r

    输出描述:

    对于每个查询,输出一个数表示答案
    示例1

    输入

    5
    1 3
    1 4
    2 4
    4 4
    1 1000000000

    输出

    1
    2
    1
    1
    31622

    备注:

    n <= 100000
    0<= l <= r <= 1000000000

    直接二分或者sqrt都没事的,我竟然维护错了端点,就是这个0的问题

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=1e5;
    ll a[N];
    int main()
    {
        for(int i=0;i<N;i++)
        a[i]=i*1LL*i;
        int T;
        scanf("%d",&T);
        while(T--)
        {
            ll l,r,cnt;
            cin>>l>>r;
            int pos=lower_bound(a,a+N,r)-a;
            cnt=pos;
            if(a[pos]!=r)cnt--;
            pos=lower_bound(a,a+N,l)-a;
            cnt-=pos;
            if(pos)
            {if(a[pos-1]!=l)cnt++;}
            else cnt++;
            cout<<cnt<<endl;
        }
        return 0;
    }
    比赛
    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 131072K,其他语言262144K
    64bit IO Format: %lld

    题目描述

    你在打比赛,这场比赛总共有12个题

    对于第i个题,你的队伍有a[i]的几率解决她

    如果解决不了她呢?

    由于所有人讨论的都很大声

    所以你有b[i]的概率从左边那个队那里听会这个题的做法

    有c[i]的概率从右边那个队那里听会这个题的做法

    请问最终你们队伍解出0-12题的概率分别是多少

    输入描述:

    第一行12个数表示a[1] -> a[12]
    第二行12个数表示b[1] -> b[12]
    第三行12个数表示c[1] -> c[12]

    输出描述:

    输出13行,第i行表示解出i-1题的概率
    保留6位小数
    示例1

    输入

    0.20 0.30 0.37 0.40 0.45 0.50 0.57 0.60 0.75 0.76 0.77 0.83
    0.85 0.88 0.90 0.94 0.100 0.104 0.105 0.107 0.115 0.120 0.122 0.125
    0.128 0.130 0.134 0.140 0.149 0.150 0.152 0.155 0.170 0.183 0.203 0.240

    输出

    0.000000
    0.000000
    0.000000
    0.000011
    0.000160
    0.001508
    0.009620
    0.041938
    0.124153
    0.243773
    0.301960
    0.212453
    0.064424

    这个题目挺好的啊,复习了概率,我发现我这个学的不太行啊

    #include<bits/stdc++.h>
    using namespace std;
    double a[15],b[15],c[15];
    double dp[15][15];
    int main()
    {
        for(int i=1;i<=12;i++)
            cin>>a[i];
        for(int i=1;i<=12;i++)
            cin>>b[i];
        for(int i=1;i<=12;i++)
            cin>>c[i];
        dp[0][0]=1;
        for(int i=1;i<=12;i++)
        for(int j=0;j<=12;j++)
        {
          dp[i][j]=dp[i-1][j]*(1.-a[i]-(1.-a[i])*(b[i]+c[i]-b[i]*c[i]));
        if(j)dp[i][j]+=dp[i-1][j-1]*(a[i]+(1.-a[i])*(b[i]+c[i]-b[i]*c[i]));
        }
        for(int i=0;i<=12;i++)
        {
            if(dp[12][i]<0)printf("0.000000
    ");
            else printf("%.6f
    ",dp[12][i]);
        }
        return 0;
    }
    逆序对
    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 131072K,其他语言262144K
    64bit IO Format: %lld

    题目描述

    求所有长度为n的01串中满足如下条件的二元组个数:
    设第i位和第j位分别位ai和aj(i<j),则ai=1,aj=0。
    答案对1e9+7取模。

    输入描述:

    输入一个n。

    输出描述:

    输出答案对1e9+7取模
    示例1

    输入

    3

    输出

    6

    说明


     

    备注:

     n <= 1018

    我写了暴力,得到的这个字符串0 0  1 6 13啥的,找到了答案是n*(n+1)*2^(n-2,可是我的代码爆了ll啊,奇妙用了int128过的,之后我看到我没有及时取模

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const ll MD=1e9+7;
    ll n;
    ll poww(ll x, ll n)
    {
        ll ans=1;
        while(n)
        {
            if(n&1)ans=ans*x%MD;
            x=x*x%MD;
            n>>=1;
        }
        return ans;
    }
    int main()
    {
        while(cin>>n)
        {
            n--;
            if(n<=0)printf("0");
            else if(n==1)printf("1");
            else
                cout<<poww(2,n-2)*(n%MD)%MD*((n+1)%MD)%MD;
        }
        return 0;
    }
    双拆分数
    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 131072K,其他语言262144K
    Special Judge, 64bit IO Format: %lld

    题目描述

    对于一个数字串 s,若能找到一种将其分成左右两个非空部分 s1,s2 的方案,使得:
        1、s1,s2 均无前导零
        2、存在两个正整数 a,b,使得 b 整除 a,且 a/b=s1, a*b=s2
    那么我们记这是一个合法的分法。特别地,如果一个串有两个或更多个不同的合法的分法,那么我们称这个数字串是双拆分数字串。
    给定一个 n,要求构造一个长度恰为 n 的双拆分数字串。如果无解,输出 -1。

    输入描述:

    输入仅一行一个正整数 n(1 <= n <= 300)。

    输出描述:

    仅一行一个数字串或者 -1。
    示例1

    输入

    8

    输出

    24419764

    构造题,这个人想的这个特殊值好牛逼啊,佩服,我这种lowbi只能找到输出-1的

    #include <cstdio>
    int main()
    {
        int n;
        scanf("%d",&n);
        if(n<=3) puts("-1");
        else
        {
            if(!(n&1))printf("1144"),n-=4;
            else printf("16400"),n-=5;
            while(n--) printf("0");
        }
        return 0;
    }
  • 相关阅读:
    设计模式总结——程序猿武功秘籍(下一个)
    easyui datagrid显示进度条控制操作
    使用CountDownLatch和CyclicBarrier处理并发线程
    人类探索地外文明显著取得的进展
    Linux 启动过程的详细解释
    不会跳回到微博认定申请书
    unix域套接字UDP网络编程
    VS SQL 出现%CommonDir%dte80a.olb 该解决方案
    数据仓库与数据挖掘的一些基本概念
    CheckBoxPreference组件
  • 原文地址:https://www.cnblogs.com/BobHuang/p/8094522.html
Copyright © 2020-2023  润新知