FallDream打的AB都FFT了,只剩一个我打的C,没进前一百,之后看看马拉松复活赛有没机会呗。

A. Voltage Keepsake

题目大意:n个东西,每个东西一开始有bi能源,每秒消耗ai能源,每秒可以给一个东西加p能源,秒可以为实数,问至多多少秒内所有东西能源一直为正。(n<=100,000)

思路:二分答案,随便check一下。不特判无解可能会炸精度。

#include<cstdio>
#include<algorithm>
using namespace std;
#define lb long double
inline int read()
{
int x;char c;
while((c=getchar())<''||c>'');
for(x=c-'';(c=getchar())>=''&&c<='';)x=x*+c-'';
return x;
}
#define MN 100000
int a[MN+],b[MN+];
int main()
{
int n=read(),p=read(),t,i;long long cnt=;
lb l,r,mid,sum;
for(i=;i<=n;++i)cnt+=a[i]=read(),b[i]=read();
if(cnt<=p)return *puts("-1");
for(t=,l=,r=1e12;--t;)
{
mid=(l+r)/;
for(i=,sum=;i<=n;++i)sum+=max((lb),a[i]*mid-b[i]);
(sum>p*mid?r:l)=mid;
}
printf("%.10lf",(double)l);
}

B. Volatile Kite

题目大意:给出一个n的点的凸多边形,求一个最大的d,使得每个点任意移动d以内的距离,得到的新多边形边不相撞且仍是凸多边形。(n<=1,000)

思路:枚举相邻三个点,d不会超过点i+1到点i与点i+2连线距离的一半,复杂度O(n)。

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
inline int read()
{
int x,f=;char c;
while((c=getchar())<''||c>'')if(c=='-')f=;
for(x=c-'';(c=getchar())>=''&&c<='';)x=x*+c-'';
return f?x:-x;
}
#define MN 1000
struct point{double x,y;}p[MN+];
double dis(point a){return sqrt(a.x*a.x+a.y*a.y);}
point operator-(point a,point b){return (point){a.x-b.x,a.y-b.y};}
double operator*(point a,point b){return a.x*b.y-a.y*b.x;}
int main()
{
int n=read(),i,j;double ans=1e18;
for(i=;i<n;++i)p[i].x=read(),p[i].y=read();
p[n]=p[];p[n+]=p[];
for(i=;i<n;++i)ans=min(ans,fabs((p[i+]-p[i])*(p[i+]-p[i]))/dis(p[i]-p[i+]));
printf("%.10lf",ans/);
}

C. Vulnerable Kerbals

题目大意:给出m和n个0~m-1内的数,构造一个尽可能长的所有元素都在0~m-1内的数列,使所有前缀积模m不相同且不在n个数中出现过。(0<=n<m<=200,000)

思路:若前i个数的前缀积为x,前i+1个数的前缀积可以为y当且仅当ax-bm=y有解,即gcd(x,m)|y,若我们让所有满足这个条件的x,y,x向y连边,题目即求最长链,gcd(x,m)相同的x在一个连通块内,每个连通块gcd(xi,m)向连通块gcd(xj,m)(gcd(xi,m)|gcd(xj,m))连边,得到一个边数为O(nlogn)的拓扑图,直接DP即可。

#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
#define ll long long
char B[<<],*S=B,C;int X;
inline int read()
{
while((C=*S++)<''||C>'');
for(X=C-'';(C=*S++)>=''&&C<='';)X=(X<<)+(X<<)+C-'';
return X;
}
#define MN 200000
int gcd(int x,int y){return y?gcd(y,x%y):x;}
vector<int> v[MN+];
int m,u[MN+],f[MN+],r[MN+],ls=;
void exgcd(ll x,ll y,ll z,ll&a,ll&b)
{
if(!y){a=z/x;b=;return;}
ll aa,bb;exgcd(y,x%y,z,aa,bb);
a=-bb;b=-aa-bb*(x/y);
}
void out(int x)
{
if(!x)return;
out(r[x]);
int i;ll a,b;
for(i=;i<v[x].size();++i)
exgcd(ls,m,v[x][i],a,b),
printf("%d ",(a%m+m)%m),ls=v[x][i];
}
int main()
{
fread(B,,<<,stdin);
int n,i,j,mx=;
n=read();m=read();
for(i=;i<=n;++i)u[read()]=;
for(i=;i<m;++i)if(!u[i])v[gcd(i,m)].push_back(i);
for(i=;i<m;++i)
{
if((f[i]+=v[i].size())>f[mx])mx=i;
for(j=i;j<m;j+=i)if(f[i]>f[j])f[j]=f[i],r[j]=i;
}
printf("%d\n",f[mx]+!u[]);
out(mx);
if(!u[])puts("");
}

D. Varying Kibibits

题目大意:给出n个数的集合T,F(S)的各位数字为集合S中各个数字对应位数字的最小值,例如F(123,321)=121,求的异或和。(n<=10^6,数字<=999,999)

思路:F值恰好为x的子集不好求,我们考虑求出F值各位数字都大等x的子集,也就是数字各位都大等于x的数的集合的所有子集,答案我们枚举各位加一,容斥一下即可求出,现在问题是如何求出这个集合的子集和的平方和,只要同时维护一个集合的子集和的和、子集和的平方和、集合大小,就可以支持合并集合和删除集合(稍微推一下式子,挺简单的,或者看下面的代码),数字各位都大等于x的集合同样也可以容斥求出,总复杂度O(2^6*n),可能需要卡卡常数,正解貌似是O(6n)的,以后补。

#include<cstdio>
char B[<<],*S=B,C;int X;
inline int read()
{
while((C=*S++)<''||C>'');
for(X=C-'';(C=*S++)>=''&&C<='';)X=X*+C-'';
return X;
}
#define MN 1000000
#define MOD 1000000007
int a[MN+],p2[MN+],r2[MN+],pw[];
struct data
{
int s1,s2,sz;
data(int s1=,int s2=,int sz=):s1(s1),s2(s2),sz(sz){}
void operator+=(const data&b)
{
s2=(1LL*s2*p2[b.sz]+1LL*b.s2*p2[sz]+2LL*s1*b.s1)%MOD;
s1=(1LL*s1*p2[b.sz]+1LL*b.s1*p2[sz])%MOD;
sz+=b.sz;
}
void operator-=(const data&b)
{
sz-=b.sz;
s1=((s1-1LL*b.s1*p2[sz])%MOD+MOD)*r2[b.sz]%MOD;
s2=((s2-2LL*s1*b.s1-1LL*b.s2*p2[sz])%MOD+MOD)*r2[b.sz]%MOD;
}
}s[MN+];
void solve1(int x,int k,int d,int p)
{
if(d>){if(x!=k)if(p>)s[x]+=s[k];else s[x]-=s[k];return;}
solve1(x,k,d+,p);
if(k%pw[d+]/pw[d]<)solve1(x,k+pw[d],d+,-p);
}
inline int mod(int x){if(x>=MOD)x-=MOD;if(x<)x+=MOD;return x;}
void solve2(int x,int k,int d,int p)
{
if(d>){if(x!=k)s[x].s2=mod(s[x].s2+p*s[k].s2);return;}
solve2(x,k,d+,p);
if(k%pw[d+]/pw[d]<)solve2(x,k+pw[d],d+,-p);
}
int main()
{
B[fread(B,,<<,stdin)]=;
int n=read(),i;long long ans=;
while(n--)++a[read()];
for(p2[]=i=;i<=MN;++i)p2[i]=(p2[i-]<<)%MOD;
for(r2[]=i=;i<=MN;++i)r2[i]=(r2[i-]*((MOD+1LL)>>))%MOD;
for(pw[]=i=;i<;++i)pw[i]=pw[i-]*;
for(i=MN;i--;){solve1(i,i,,-);while(a[i]--)s[i]+=data(i,1LL*i*i%MOD,);}
for(i=;i<MN;++i)solve2(i,i,,),ans^=1LL*i*s[i].s2;
printf("%I64d",ans);
}

VK Cup 2017 - Round 2的更多相关文章

  1. Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) 菜鸡只会ABC!

    Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) 全场题解 菜鸡只会A+B+C,呈上题解: A. Bear and ...

  2. Codeforces Round #412 (rated, Div. 2, base on VK Cup 2017 Round 3)(A.B.C,3道暴力题,C可二分求解)

    A. Is it rated? time limit per test:2 seconds memory limit per test:256 megabytes input:standard inp ...

  3. Codeforces Round #412 (rated, Div. 2, base on VK Cup 2017 Round 3) A B C D 水 模拟 二分 贪心

    A. Is it rated? time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  4. Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2)(A.思维题,B.思维题)

    A. Vicious Keyboard time limit per test:2 seconds memory limit per test:256 megabytes input:standard ...

  5. VK Cup 2017 - Round 1

    和FallDream组队瞎打一通--B两个人写的都挂了233,最后只剩下FallDream写的A和我写的C,最后我yy了个E靠谱做法结果打挂了,结束之后改了改就A了,难受. AC:AC Rank:18 ...

  6. Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2) 题解【ABCDE】

    A. Vicious Keyboard 题意:给你一个字符串,里面只会包含VK,这两种字符,然后你可以改变一个字符,你要求VK这个字串出现的次数最多. 题解:数据范围很小,暴力枚举改变哪个字符,然后c ...

  7. Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2) A B C D 暴力 水 二分 几何

    A. Vicious Keyboard time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  8. Codeforces Round #412 (rated, Div. 2, base on VK Cup 2017 Round 3) D - Dynamic Problem Scoring

    地址:http://codeforces.com/contest/807/problem/D 题目: D. Dynamic Problem Scoring time limit per test 2 ...

  9. Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) E

    Description Bear Limak prepares problems for a programming competition. Of course, it would be unpro ...

  10. VK Cup 2017 - Round 1 (CDE)

    771C Bear and Tree Jumps 大意: 给定树,每步能走到距离不超过$k$的任意点,记$f(s,t)$为$s$到$t$的最少步数,求$\sum\limits_{s<t}f(s, ...

随机推荐

  1. Beta冲刺 第七天

    Beta冲刺 第七天 昨天的困难 昨天的困难在一些多表查询上,不熟悉hibernate的套路,走了很多弯路. 第一次使用图表插件,在图表的显示问题上花了一定的时间. 对于页面绑定和后台数据自动填充的理 ...

  2. 每日冲刺报告——Day2(Java-Team)

    第二天报告(11.3  周五) 团队:Java-Team 成员: 章辉宇(284) 吴政楠(286) 陈阳(PM:288) 韩华颂(142) 胡志权(143) github地址:https://git ...

  3. 展示博客(Beta版本)

    团队:xjbz 1. 团队成员博客,源码仓库地址. coding:https://git.coding.net/z404395979/xjbz.git 钟平辉(071):http://www.cnbl ...

  4. PTA题目的處理(四)

    题目7-3 求交错序列前N项和 1.实验代码 #include <stdio.h> //#include <stdlib.h> int main() { ,N; double ...

  5. sqlserver之排序规则和ETL不支持sqlserverdatetime2的问题

    sqlserver的排序规则大概分为Windows 排序规则和 SQL Server 排序规则.数据在安装的时候,默认不设置会默认为SQL_Latin1_General_CP1_CI_AI.数据库在创 ...

  6. java连接jdbc Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by defa

    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp_db","root",& ...

  7. android 时间获取以及时间格式化

    Android中获取系统时间有多种方法,可分为Java中Calendar类获取,java.util.date类实现,还有android中Time实现 现总结如下: 方法一: void getTime1 ...

  8. L2 约束的最小二乘学习法

    \[ \begin{align*} &J_{LS}{(\theta)} = \frac { 1 }{ 2 } { \left\| \Phi \theta - y \right\| }^{ 2 ...

  9. Python内置函数(30)——super

    英文文档: super([type[, object-or-type]]) Return a proxy object that delegates method calls to a parent ...

  10. Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 前言中不允许有内容。

    Error creating document instance. Cause: org.xml.sax.SAXParseException;  lineNumber: 1; columnNumber ...