这场比赛打完后可以找何神玩了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. 【云计算】Docker删除名称为none的Image镜像

    先上删除命令: docker images|grep none|awk '{print $3 }'|xargs docker rmi docker强制批量删除none的image镜像   真是有段时间 ...

  2. nested exception is org.xml.sax.SAXParseException; lineNumber: 8; columnNumber: 56; cvc-complex-type.2.4.c通配符的匹配很全面, 但无法找到元素 'dubbo:application' 的声明

    严重: Exception sending context initialized event to listener instance of class org.springframework.we ...

  3. iOS7 status bar 样式问题

    在ios7中,有如下status bar 样式 typedef NS_ENUM(NSInteger, UIStatusBarStyle) { UIStatusBarStyleDefault = , / ...

  4. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib

    今天在linux里安装mysql,运行时遇到这样的错误 ERROR 2002 (HY000): Can't connect to local MySQL server through socket ' ...

  5. Java for LeetCode 065 Valid Number

    Validate if a given string is numeric. Some examples: "0" => true " 0.1 " =&g ...

  6. jsp之间传参中文乱码问题

    jsp页面之间传参,传中文会出现乱码问题. 如下: $('.yzjjfa_row').eq(0).append('<a class="yzjjfa_contItem jjfa_acti ...

  7. HDU 4334 Trouble (暴力)

    Trouble Time Limit: 5000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Statu ...

  8. UITableView:下拉刷新和上拉加载更多

    [转载请注明出处] 本文将说明让UIScrollView支持"下拉刷新"和"上拉加载更多"的实现机制,并实现一个可用的tableView子类,以下主要以&quo ...

  9. static_cast, dynamic_cast, const_cast

    http://www.cnblogs.com/chio/archive/2007/07/18/822389.html 首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1 ...

  10. hdu 1728:逃离迷宫(DFS,剪枝)

    逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...