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;
}
};

  

topcoder srm 697 div1 -3的更多相关文章

  1. Topcoder SRM 643 Div1 250<peter_pan>

    Topcoder SRM 643 Div1 250 Problem 给一个整数N,再给一个vector<long long>v; N可以表示成若干个素数的乘积,N=p0*p1*p2*... ...

  2. Topcoder Srm 726 Div1 Hard

    Topcoder Srm 726 Div1 Hard 解题思路: 问题可以看做一个二分图,左边一个点向右边一段区间连边,匹配了左边一个点就能获得对应的权值,最大化所得到的权值的和. 然后可以证明一个结 ...

  3. topcoder srm 714 div1

    problem1 link 倒着想.每次添加一个右括号再添加一个左括号,直到还原.那么每次的右括号的选择范围为当前左括号后面的右括号减去后面已经使用的右括号. problem2 link 令$h(x) ...

  4. topcoder srm 738 div1 FindThePerfectTriangle(枚举)

    Problem Statement      You are given the ints perimeter and area. Your task is to find a triangle wi ...

  5. Topcoder SRM 602 div1题解

    打卡- Easy(250pts): 题目大意:rating2200及以上和2200以下的颜色是不一样的(我就是属于那个颜色比较菜的),有个人初始rating为X,然后每一场比赛他的rating如果增加 ...

  6. Topcoder SRM 627 div1 HappyLettersDiv1 : 字符串

    Problem Statement      The Happy Letter game is played as follows: At the beginning, several players ...

  7. Topcoder SRM 584 DIV1 600

    思路太繁琐了 ,实在不想解释了 代码: #include<iostream> #include<cstdio> #include<string> #include& ...

  8. TopCoder SRM 605 DIV1

    604的题解还没有写出来呢.先上605的. 代码去practice房间找. 说思路. A: 贪心,对于每个类型的正值求和,如果没有正值就取最大值,按着求出的值排序,枚举选多少个类型. B: 很明显是d ...

  9. topcoder srm 575 div1

    problem1 link 如果$k$是先手必胜那么$f(k)=1$否则$f(k)=0$ 通过对前面小的数字的计算可以发现:(1)$f(2k+1)=0$,(2)$f(2^{2k+1})=0$,(3)其 ...

随机推荐

  1. filename

    package com.enjoyor.soa.traffic.server.tms.controller; import java.io.BufferedReader;import java.io. ...

  2. 工厂模式&策略模式。

    抽象.封装,具体事情做得越多,越容易犯错误.这每个做过具体工作的人都深有体会,相反,官做得越高,说出的话越抽象越笼统,犯错误可能性就越少.好象我们从编程序中也能悟出人生道理.(百度百科) 不断抽象封装 ...

  3. MyBatis基础入门《十四》ResultMap子元素(association )

    MyBatis基础入门<十四>ResultMap子元素(association ) 1. id: >> 一般对应数据库中改行的主键ID,设置此项可以提高Mybatis的性能 2 ...

  4. springmvc静态资源无法加载

    springmvc拦截所有请求,用/: <servlet> <servlet-name>springmvc</servlet-name> <servlet-c ...

  5. 转:【专题四】自定义Web浏览器

    前言: 前一个专题介绍了自定义的Web服务器,然而向Web服务器发出请求的正是本专题要介绍的Web浏览器,本专题通过简单自定义一个Web浏览器来简单介绍浏览器的工作原理,以及帮助一些初学者揭开浏览器这 ...

  6. JavaScript:原生JS实现Facebook实时消息抓捕

    基础知识准备: HTML5给我们提供了一个新的对象叫作:MutationObserver.为了兼容,还有WebKitMutationObserver.MozMutationObserver,挂靠在wi ...

  7. Python词云分析

    import jieba from matplotlib import pyplot as plt from wordcloud import WordCloud from PIL import Im ...

  8. ubunta apt install error

    ubuntu系统: 用apt-get命令安装一些软件包时,总报错:E:could not get lock /var/lib/dpkg/lock -open等 出现这个问题的原因可能是有另外一个程序正 ...

  9. 分享30道Redis面试题,面试官能问到的我都找到了

    1.什么是Redis?简述它的优缺点? Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到 ...

  10. Python进阶【第七篇】文件处理

    一.文件操作 在Python中,文件读写是最常见的操作.对文件的操作为: #1. 打开文件,得到文件句柄并赋值给一个变量 f=open('a.txt','r',encoding='utf-8') #默 ...