topcoder srm 697 div1 -3

topcoder srm 697 div1 -3

1、给定长度为$n$ 的数组$b$,构造长度为$n$ 的且没有重复元素的数组$a$,令$p_{i}$表示$a$中除$a_{i}$外其他元素的乘积。构造出的$a$满足$a_{i}^{b_{i}}$能够被$p_{i}$整除。这样的数组$a$存在否?

思路:因为$a_{i}^{b_{i}}$中所有素因子的指数大于等于$p_{i}$。所以可以假设所有的$a_{i}$只含有素因子2。令$a_{i}=2^{A_{i}},s=\sum_{i=1}^{n}A_{i}$,那么有$A_{i}b_{i}\geq s-A_{i}$,即$A_{i}\geq \frac{s}{1+b_{i}}$。所有这些加起来约去$s$得到$\sum_{i=1}^{n}\frac{1}{1+b_{i}}\leq 1$。令$K=\sum_{i=1}^{n}\frac{1}{1+b_{i}}$。所以$K>1$无解。$K=1$但是存在相同的$b$时无解。因为$K=1$说明$A_{i}= \frac{s}{1+b_{i}}$,但是相同的$b$ 导致出现了相同的$A$。

#include <stdio.h>
#include <string>
#include <stack>
#include <vector>
#include <string.h>
#include <algorithm>
#include <assert.h>
using namespace std;



class DivisibleSetDiv1
{
public:
	string isPossible(vector <int> b)
	{
	    const int n=(int)b.size();
	     sort(b.begin(),b.end());
	     double ans=0;
	    for(int i=0;i<n;++i) ans+=1.0/(b[i]+1);

	    if(ans>1+1e-10) {
            return "Impossible";
	    }
	    else if(ans>1-1e-10) {
            for(int i=1;i<n;++i) if(b[i]==b[i-1]) {
                return "Impossible";
            }
	    }
        return "Possible";
	}
};

  

2、有$n$匹马,每个马有个各不相同的值$a_{i}$。有$2^{m}$场比赛。第$i$匹马在第$j$场比赛中的用时为$a_{i}$^$j$(抑或)。每场比赛所有的马排名为$[0,n-1]$。排名为$k$的马得到的罚时为$k^{2}$。所有比赛结束后每匹马的所有罚时加起来得到第$i$匹马的总罚时$p_{i}$,计算所有$p_{i}$%1000000007的抑或值。

思路:将每匹马的值$a_{i}$建立一课二叉树,并在节点上记录子树中插入的马的个数。然后依次计算每一匹马的$p_{i}$值。对于第$i$匹马,设比赛$j$的二进制高$t$位等于$a_{i}$的高$t$位的所有比赛中它的罚时为$g=\sum_{r=1}^{2^{m-t}}s_{r}^{2}$。$2^{m-t}$是因为已经进行了这么多长比赛。那么在进行比赛的二进制第$m-t$位不同于$a_{i}$的第$m-t$位但是它们的高$t-1$ 位相同时的所有比赛中,它的罚时为$g^{‘}=\sum_{r=1}^{2^{m-t}}(s_{r}+x)^{2}$。其中$x$为与$a_{i}$ 的第$m-t$位不同的一侧所有马的个数。那么$g^{‘}=g+2^{m-t}x^{2}+2x\sum_{r=1}^{2^{m-t}}s_{r}$。这样记录已经遍历的子树的前缀和$\sum_{r=1}^{2^{m-t}}s_{r}$即可。

#include <stdio.h>
#include <string>
#include <stack>
#include <vector>
#include <string.h>
#include <algorithm>
#include <assert.h>
using namespace std;

const int N=200005;
const int mod=1000000007;

int a[N];

int T[N*32][2];
int S[N*32];
int e;
int m;


void add(int x)
{
    int p=1;
    for(int i=m-1;i>=0;--i)
    {
        int t=(x>>i)&1;
        if(!T[p][t]) T[p][t]=++e;
        p=T[p][t];
        ++S[p];
    }
}

int c[32];

void cal(int x)
{
    int p=1;
    for(int i=m-1;i>=0;--i)
    {
        int t=(x>>i)&1;
        c[i]=S[T[p][t^1]];
        p=T[p][t];
    }
}

class XorOrderDiv1
{
public:
    int get(int M,int n,int a0,int b)
    {
        m=M;
        a[1]=a0;
        for(int i=2;i<=n;++i) a[i]=(a[i-1]+b)&((1<<m)-1);
        e=1;
        for(int i=1;i<=n;++i) add(a[i]);

        int ans=0;
        for(int i=1;i<=n;++i)
        {
            cal(a[i]);
            int tmp=0,sum=0;
            for(int j=0;j<m;++j)
            {
                tmp=(tmp+(long long)(1<<j)*c[j]%mod*c[j]%mod+(long long)2*c[j]%mod*sum%mod+tmp)%mod;
                sum=(sum*2+(long long)c[j]*(1<<j))%mod;
            }
            ans^=tmp;
        }
        return ans;
    }
};

  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101196.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 教育游戏常见开发工具(转)[通俗易懂]

    教育游戏常见开发工具(转)[通俗易懂]   就开发工具而言,教育游戏软件与其它游戏软件的开发工具没有什么本质的区别。目前用于游戏开发的工具主要有这样几种:a)VisualStudio组件Visua1C++系列     它被认为是当今最强大的游戏软件开发工具,用它开发的游戏数量很多,代表作有:暴雪娱乐的“Diabl。暗黑破坏神11”、“魔兽争霸”、“星际争霸”;其他公司产品:“命令与征服”、“FIFA”等大家熟悉的大型游戏。    

    2022年6月2日
    41
  • python 实现协同过滤推荐算法

    测试数据http://grouplens.org/datasets/movielens/#!/usr/bin/python3#-*-coding:utf-8-*-fromnumpyimport*importtimefromtexttableimportTexttable#协同过滤推荐算法主要分为:#1、基于用户。根据相邻用户,预测当前用户没有偏好的未涉及物

    2022年4月9日
    39
  • google maps api_js调用谷歌浏览器接口

    google maps api_js调用谷歌浏览器接口一:基本知识:1.使用谷歌地图API的第一步就是要注册一个API密钥,需要注重一下两点:1.假如使用API的页面还没有发布,只是在本地调试,可以不用密钥,随便用个字符串代替就可以了。

    2022年8月6日
    8
  • 百度竞价点击(商盾)研究

    百度竞价点击(商盾)研究今天写个比较详细的说明,也参考了大量这方面的资料进行的总结,算是给大家一个长见识,写的不好的地方,希望大家多多指教!感谢吾爱朋友的支持!移动广告平台都有各自的检测点击欺诈的机制,通过各种维度(包括I

    2022年7月2日
    27
  • 免费好用的cdn_如何查询cdn提供商

    免费好用的cdn_如何查询cdn提供商CDN介绍CDN也称内容分发网络,其原理大概是将服务内容分发至全网加速节点,让用户从就近的服务器节点上获取内容,从而提高网站的访问速度。大部分服务商(如阿里云,网易蜂巢,京东云等)的CDN服务是按使用量收费的,也有一些服务商提供免费的CDN服务,本文简单的总结一下目前可免费使用的CDN,对个人网站来说,免费的已经够用了。腾讯云CDN腾讯云CDN官网:https://cloud.tencent.com/product/cdn腾讯云可以免费申请SSL证书,腾讯云CDN也能很好的支持SSL证书,从而实

    2022年9月10日
    0
  • 详述ViewState用法

    详述ViewState用法与刚接触ASP.NET页面的开发人员交谈时,他们通常向我提出的第一个问题就是:“那个ViewState到底是什么?”他们的语气中流露出的那种感觉,就象我来到一家异国情调的餐馆,侍者端上一道我从未见过的菜肴时的那种感觉-既疑惑不解,又充满好奇。但肯定有人认为它不错,否则就不会提供了。所以,我会先尝一尝,或许会喜欢上它,尽管它看上去的确很古怪!对于ViewState也是如此,但是如果适应了它的风格,…

    2022年7月21日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号