这场比赛打完后可以找何神玩了orz(orz)*

T1Rikka with Chess

嘿嘿嘿。输出n/2+m/2即可。

我能说我智商捉鸡想了4min吗?

T2Rikka with Graph

由于N个点的连通块最少有N-1条边,所以至多删两条。

暴力枚举然后并查集判判即可。

T3Rikka with Array

奥妙重重的数位dp。

设f[i][j][d1][d2][d3]表示前i位,x1与x2的数位差为j。大小关系如下:

d1=0 x1<x2
d1=1 x1=x2
d1=2 x1>x2
d2=0 x1<=n
d2=1 x1>n
d3=0 x2<=n
d3=1 x2>n

然后滚动数组DP一下。

#include<cstdio>
#include<cctype>
#include<queue>
#include<cmath>
#include<cstring>
#include<algorithm>
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define ren for(int i=first[x];i;i=next[i])
using namespace std;
inline int read() {
int x=,f=;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-;
for(;isdigit(c);c=getchar()) x=x*+c-'';
return x*f;
}
typedef long long ll;
const int mod=;
const int maxn=;
struct bign {
int s[maxn],len;
bign operator = (const char* a) {
memset(s,,sizeof(s));len=strlen(a);
rep(i,,len-) s[i]=a[len-i-]-'';
}
void operator /= (int b) {
int x=;
dwn(i,len-,) {
int v=s[i]+x;
s[i]=v/;
x=(v%)*;
}
while(!s[len-]&&len>) len--;
}
void print() {
dwn(i,len-,) printf("%d",s[i]);
puts("");
}
}N;
char s[maxn];
int bit[maxn];
ll f[][maxn*][][][];
void solve() {
scanf("%s",s);N=s;int n=;
while(N.s[]||N.len!=) bit[++n]=N.s[]&,N/=;
memset(f,,sizeof(f));
int cur=;f[][n][][][]=;
rep(i,,n-) {
cur^=;memset(f[cur],,sizeof(f[cur]));
rep(j,-i+n,i+n) rep(d1,,) rep(d2,,) rep(d3,,) {
ll& ans=f[cur^][j][d1][d2][d3];
(f[cur][j][d1][bit[i+]?:d2][bit[i+]?:d3]+=ans)%=mod;
(f[cur][j][d1][(!bit[i+])?:d2][(!bit[i+])?:d3]+=ans)%=mod;
(f[cur][j+][][(!bit[i+])?:d2][bit[i+]?:d3]+=ans)%=mod;
(f[cur][j-][][bit[i+]?:d2][(!bit[i+])?:d3]+=ans)%=mod;
}
}
ll ans=;
rep(i,n+,*n) (ans+=f[cur][i][][][])%=mod;
printf("%lld\n",ans);
}
int main() {
int T=read();
while(T--) solve();
return ;
}

T4:Rikka with Sequence

我选择go die。

T5:Rikka with Phi

考虑用线段树来做。

对于操作1,暴力变换带标记且不全为1的区间。

对于操作2,在线段树上打标记。

对于操作3,线段树上直接查询。

等等,我们写程序要讲道理对不对。

我们发现对于一个[1,10^7]的数x,最多执行logx次操作1x就变成了1。

我们可以进行势能分析,初始势能为nlogx。

对于操作1,每变换一次势能-1。

对于操作2,至多增加log^2n的势能。

对于操作3,时间复杂度恒定O(logn)

所以总时间复杂度O(nlog^2n)

#include<cstdio>
#include<cctype>
#include<queue>
#include<cmath>
#include<cstring>
#include<algorithm>
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define ren for(int i=first[x];i;i=next[i])
using namespace std;
const int BufferSize=<<;
char buffer[BufferSize],*head,*tail;
inline char Getchar() {
if(head==tail) {
int l=fread(buffer,,BufferSize,stdin);
tail=(head=buffer)+l;
}
return *head++;
}
inline int read() {
int x=,f=;char c=Getchar();
for(;!isdigit(c);c=Getchar()) if(c=='-') f=-;
for(;isdigit(c);c=Getchar()) x=x*+c-'';
return x*f;
}
typedef long long ll;
const int N=;
const int maxn=;
int vis[N],phi[N],pri[N/],cnt;
void gen(int n) {
phi[]=;
rep(i,,n) {
if(!vis[i]) pri[++cnt]=i,phi[i]=i-;
rep(j,,cnt) {
if(i*pri[j]>n) break;
vis[i*pri[j]]=;
if(i%pri[j]==) {phi[i*pri[j]]=phi[i]*pri[j];break;}
phi[i*pri[j]]=phi[i]*(pri[j]-);
}
}
}
ll sumv[maxn*],is[maxn*],setv[maxn*];
void pushdown(int o,int l,int r) {
if(setv[o]) {
int lc=o<<,rc=lc|,mid=l+r>>;
setv[lc]=setv[rc]=setv[o];
is[lc]=is[rc]=;
sumv[lc]=setv[o]*(mid-l+);
sumv[rc]=setv[o]*(r-mid);
setv[o]=;
}
}
void maintain(int o,int l,int r) {
int lc=o<<,rc=lc|;
if(setv[o]) sumv[o]=(r-l+)*setv[o],is[o]=(setv[o]!=);
else sumv[o]=sumv[lc]+sumv[rc],is[o]=is[lc]|is[rc];
}
void update(int o,int l,int r,int ql,int qr,int v) {
if(ql<=l&&r<=qr) setv[o]=v;
else {
pushdown(o,l,r);
int lc=o<<,rc=lc|,mid=l+r>>;
if(ql<=mid) update(lc,l,mid,ql,qr,v);
if(qr>mid) update(rc,mid+,r,ql,qr,v);
}
maintain(o,l,r);
}
void update2(int o,int l,int r,int ql,int qr) {
if(ql<=l&&r<=qr&&setv[o]) setv[o]=phi[setv[o]];
else {
pushdown(o,l,r);
int lc=o<<,rc=lc|,mid=l+r>>;
if(ql<=mid&&is[lc]) update2(lc,l,mid,ql,qr);
if(qr>mid&&is[rc]) update2(rc,mid+,r,ql,qr);
}
maintain(o,l,r);
}
void build(int o,int l,int r) {
sumv[o]=is[o]=setv[o]=;
if(l==r) setv[o]=read();
else {
int lc=o<<,rc=lc|,mid=l+r>>;
build(lc,l,mid);build(rc,mid+,r);
}
maintain(o,l,r);
}
ll query(int o,int l,int r,int ql,int qr) {
if(ql<=l&&r<=qr) return sumv[o];
pushdown(o,l,r);
int lc=o<<,rc=lc|,mid=l+r>>;ll ans=;
if(ql<=mid) ans+=query(lc,l,mid,ql,qr);
if(qr>mid) ans+=query(rc,mid+,r,ql,qr);
return ans;
}
void solve() {
int n=read(),m=read();
build(,,n);
while(m--) {
int t=read(),l=read(),r=read();
if(t==) update2(,,n,l,r);
else if(t==) update(,,n,l,r,read());
else printf("%lld\n",query(,,n,l,r));
}
}
int main() {
gen();
dwn(T,read(),) solve();
return ;
}

BestCoder Round #73的更多相关文章

  1. hdu5634 BestCoder Round #73 (div.1)

    Rikka with Phi  Accepts: 5  Submissions: 66  Time Limit: 16000/8000 MS (Java/Others)  Memory Limit: ...

  2. hdu5631 BestCoder Round #73 (div.2)

    Rikka with Graph  Accepts: 123  Submissions: 525  Time Limit: 2000/1000 MS (Java/Others)  Memory Lim ...

  3. hdu5630 BestCoder Round #73 (div.2)

    Rikka with Chess  Accepts: 393  Submissions: 548  Time Limit: 2000/1000 MS (Java/Others)  Memory Lim ...

  4. BestCoder Round #73 (div.2)

    1001 Rikka with Chess ans = n / 2 + m / 2 1002 Rikka with Graph 题意:n + 1条边,问减去至少一条使剩下的图连通的方案数. 分析:原来 ...

  5. BestCoder Round #73 (div.2)(hdu 5630)

    Rikka with Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  6. BestCoder Round #73 (div.2)1002/hdoj5631

    题意: 给出一张 nnn 个点 n+1n+1n+1 条边的无向图,你可以选择一些边(至少一条)删除. 分析: 一张n个点图,至少n-1条边才能保证联通 所以可以知道每次可以删去1条边或者两条边 一开始 ...

  7. bestcoder Round #7 前三题题解

    BestCoder Round #7 Start Time : 2014-08-31 19:00:00    End Time : 2014-08-31 21:00:00Contest Type : ...

  8. BestCoder Round #89 02单调队列优化dp

    1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01  HDU 5944   水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...

  9. BestCoder Round #90 //div all 大混战 一题滚粗 阶梯博弈,树状数组,高斯消元

    BestCoder Round #90 本次至少暴露出三个知识点爆炸.... A. zz题 按题意copy  Init函数 然后统计就ok B. 博弈 题  不懂  推了半天的SG.....  结果这 ...

随机推荐

  1. PHP网页数据正则采集

    $url ="https://********"; $contents = file_get_contents($url); //抓取页面数据 //如果出现中文乱码使用下面代码 / ...

  2. 【转】idea 用maven骨架生成项目速度慢的问题

    转自:http://9leg.com/maven/2015/02/01/why-is-mvn-archetype-generate-so-low.html 最近从IntelliJ Idea 14的Co ...

  3. Google Code Jam 2014 Round 1B Problem B

    二进制数位DP,涉及到数字的按位与操作. 查看官方解题报告 #include <cstdio> #include <cstdlib> #include <cstring& ...

  4. Http 协议Header

    Responses 部分 Header 解释 示例 Accept-Ranges 表明服务器是否支持指定范围请求及哪种类型的分段请求 Accept-Ranges: bytes Age 从原始服务器到代理 ...

  5. Java for LeetCode 141 Linked List Cycle

    Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without using ex ...

  6. mysql用命令行导入sql文件

    前面说到了用navicat工具导入导出数据库,今天给同事导入数据库的时候,发现到不进去,好多错误,情急之下,用命令行导入的 1.打开mysql的服务.cmd-->net start mysql ...

  7. OpenGL在 win8 64bits系统下的配置

    1 program files(x86)与program files 在64位系统下,为了更好的兼容32位程序,在安装一些32位程序(注意某些程序他就是32位的),会默认扔到program files ...

  8. vi 命令 用法(转)

    一.Unix编辑器概述       编辑器是使用计算机的重要工具之一,在各种操作系统中,编辑器都是必不可少的部件.Unix及其相似的ix 操作系统系列中,为方便各种用户在各个不同的环境中使用,提供了一 ...

  9. Sql server之路 (三)添加本地数据库SDF文件

    12月25日 今天搞了半天 添加本地数据库Sdf文件到项目里.总是出现问题. 安装环境 Vs2008 没有安装的环境 1.Vs2008 sp1 2. 适用于 Windows 桌面的 Microsoft ...

  10. 惊鸿一瞥(Glimpse)——开发之时即可掌控ASP.NET应用的性能

    今天要推荐的东西不是一篇文章,而是我实际使用的武器之一--用于ASP.NET应用性能诊断的大杀器.我的武器库中的武器之前已经介绍过Hangfire了,接下来我会不断和大家分享我使用的一些函数库和工具. ...