1001 Game On the Tree

1002 Tree Maker

1003 Hotaru's problem

Manacher处理好p数组。

暴力举一下公共串即可。

 # include <iostream>
# include <cstdio>
# include <algorithm>
using namespace std;
const int maxn=;
int s[maxn*],p[maxn*]; int main(void)
{
int T; cin>>T;
for(int kase=;kase<=T;kase++)
{
int N; scanf("%d",&N);
int len=*N+;
s[]=-; s[len+]=-;
s[len]=;
for(int i=;i<=*N+;i+=)
{
s[i-]=;
scanf("%d",s+i);
}
int mx=,id;
for(int i=;i<=len;i++)
{
if(mx>i) p[i]=min(p[*id-i],mx-i);
else p[i]=;
while(s[i+p[i]]==s[i-p[i]]) p[i]++;
if(p[i]+i>mx) { mx=p[i]+i; id=i; }
}
int m=;
for(int i=;i<=len;i+=)
for(int j=p[i];j>m&&j>;j-=)
if(p[i+j-]>=j) m=max(m,j);
int ans=m/*;
printf("Case #%d: %d\n",kase,ans);
}
return ;
}

Aguin

1004 Segment Game

因为区间长度是递增的。

所以新的线段不可能被已有的线段所覆盖。

所以算比新线段右端点小的右端点数减去比新线段左端点小的左端点数就是答案。

范围是1e9。先离散化。

 # include <iostream>
# include <cstdio>
# include <cstring>
# include <algorithm>
using namespace std;
# define maxn
int n,a[maxn],b[maxn],l[maxn],r[maxn];
int c1[*maxn],c2[*maxn],tem[*maxn]; int lowbit(int s)
{
return s&(-s);
} void update(int i,int x,int op)
{
int *c;
if(op==) c=c1;
else if (op==) c=c2;
while(i<=*maxn){c[i]+=x;i+=lowbit(i);}
return;
} int query(int i,int op)
{
int *c;
if(op==) c=c1;
else if (op==) c=c2;
int ret=;
while(i>){ret+=c[i];i-=lowbit(i);}
return ret;
} int main(void)
{
int kase=;
while(~scanf("%d",&n))
{
memset(c1,,sizeof(c1));
memset(c2,,sizeof(c2));
int cnt=,num=;
for(int i=;i<=n;i++)
{
scanf("%d%d",a+i,b+i);
if(a[i]==)
{
num++;
tem[++cnt]=b[i];
tem[++cnt]=b[i]+num;
}
}
sort(tem+,tem+cnt+);
int tot=unique(tem+,tem+cnt+)-tem-;
num=;
printf("Case #%d:\n",++kase);
for(int i=;i<=n;i++)
{
if(a[i]==)
{
num++;
l[num]=lower_bound(tem+,tem+tot,b[i])-tem;
r[num]=lower_bound(tem+,tem+tot,b[i]+num)-tem;
printf("%d\n",query(r[num],)-query(l[num]-,));
update(l[num],,);
update(r[num],,);
}
else if(a[i]==)
{
update(l[b[i]],-,);
update(r[b[i]],-,);
}
}
}
return ;
}

Aguin

1005 The shortest problem

发现现在自己也会找签到题了- -。

敲到一半的时候发现有两个队A了。果然是最水的题。

不过调了一会QAQ。

 # include <iostream>
# include <cstdio>
# include <algorithm>
using namespace std;
typedef long long LL; int main(void)
{
for(int kase=;;kase++)
{
int n,t; scanf("%d%d",&n,&t);
if(n==-) break;
bool is_odd;
LL odd=,even=,sum=n;
for(int i=;i<=t;i++)
{
LL tem=sum,todd=,teven=;
is_odd=;
while(sum)
{
LL mod=sum%(LL);
if(is_odd) todd+=mod;
else teven+=mod;
sum/=(LL);
is_odd=!is_odd;
}
if(!is_odd) swap(odd,even);
odd+=todd; even+=teven;
sum=even+odd;
}
printf("Case #%d: ",kase);
if((max(odd,even)-min(odd,even))%(LL)) puts("No");
else puts("Yes");
}
return ;
}

Aguin

1006 Tetris

纯模拟。本来看别人写了三四五六百行都不敢写了。

后来下了标程看了下只有100+。于是按着题解思路自己写了。

还得先回Clarification把题意读懂再写- -。

 # include <iostream>
# include <cstdio>
# include <cstring>
using namespace std;
int cnt,x,y,squ,dir;
int square[][][][],map[][],type[],rot[]={,,};
char s[]; bool in(int xx,int yy){return xx>&&xx<&&yy>;}
bool check(int s,int d,int xx,int yy)
{
for(int i=;i<;i++)
for(int j=;j<;j++)
if(square[s][d][i][j])
if(!in(xx+i,yy+j)||map[xx+i][yy+j])
return false;
return true;
} bool dec(void)
{
if(!check(squ,dir,x,y-)) return false;
y--; return true;
} void mov(void)
{
cnt++;
if(s[cnt]=='w'&&check(squ,(dir+)%rot[squ],x,y)) dir=(dir+)%rot[squ];
else if(s[cnt]=='a'&&check(squ,dir,x-,y)) x--;
else if(s[cnt]=='d'&&check(squ,dir,x+,y)) x++;
else if(s[cnt]=='s') dec();
return;
} int eli(void)
{
for(int i=;i<;i++)
for(int j=;j<;j++)
if(square[squ][dir][i][j])
map[x+i][y+j]=;
int ret=,mark[]={};
for(int j=;j<;j++)
{
int yes=;
for(int i=;i<=;i++)
if(!map[i][y+j]){yes=;break;}
if(yes)
{
for(int i=;i<=;i++) map[i][y+j]=;
ret++; mark[j]=;
}
}
for(int j=;j<;j++)
{
while(mark[j])
{
for(int i=y+j;i<;i++)
for(int k=;k<=;k++)
map[k][i]=map[k][i+];
for(int i=j;i<;i++)
mark[i]=mark[i+];
mark[]=;
}
}
return ret;
} int main(void)
{
square[][][][]=square[][][][]=square[][][][]=square[][][][]=;
square[][][][]=square[][][][]=square[][][][]=square[][][][]=;
square[][][][]=square[][][][]=square[][][][]=square[][][][]=;
square[][][][]=square[][][][]=square[][][][]=square[][][][]=;
square[][][][]=square[][][][]=square[][][][]=square[][][][]=;
square[][][][]=square[][][][]=square[][][][]=square[][][][]=;
square[][][][]=square[][][][]=square[][][][]=square[][][][]=;
int T; cin>>T;
for(int kase=;kase<=T;kase++)
{
int n; scanf("%d",&n);
scanf("%s",s+);
for(int i=;i<=n;i++) scanf("%d",type+i);
memset(map,,sizeof(map));
int ans=; cnt=;
for(int i=;i<=n;i++)
{
x=,y=,squ=type[i],dir=;
while()
{
mov();
if(!dec()) break;
}
ans+=eli();
}
printf("Case %d: %d\n",kase,ans);
}
return ;
}

Aguin

1007 Gray code

第一位没处理好。调了蛮久。

按照百度百科里说的。把第零位当成0就好。

我是找连续的?串。如果个数为奇且?串两端的相同或者个数为偶两端不同。

就必然可以调整问号使得格雷码全为1。(怎么取不重要。全加上就是。)

如果不是上面两种情况。那么必然可以调整成一个0。其余全是1。

那么找到问号串对应的a[n]中最小的剔除。其余全部加上即可。

 # include <iostream>
# include <cstdio>
# include <cstring>
# include <algorithm>
using namespace std;
# define maxn
int a[maxn];
char s[maxn]; int main(void)
{
int T; cin>>T;
for(int kase=;kase<=T;kase++)
{
scanf("%s",s+);
int len=strlen(s+);
for(int i=;i<=len;i++) scanf("%d",a+i);
int ans=; s[]='';
for(int i=;i<=len;i++)
{
if(s[i]=='?')
{
int j,tem=,Min=;
for(j=i;j<=len&&s[j]=='?';j++)
{
tem+=a[j];
Min=min(Min,a[j]);
}
if(j>len) {ans+=tem; break;}
else if(((j-i)%==&&s[i-]==s[j])||((j-i)%==&&s[i-]!=s[j])) ans+=tem+a[j];
else
{
Min=min(Min,a[j]);
ans+=tem+a[j]-Min;
}
i=j;
}
else if(s[i]!=s[i-]) ans+=a[i];
}
printf("Case #%d: %d\n",kase,ans);
}
return ;
}

Aguin

1008 Convex Polygon

1009 Root

1010 Leader in Tree Land

1011 Mahjong tree

因为前面正好做过点树dp。所以看到这个觉得四点前能过。

结果五点都没过。一直越界。后来出门坐三轮车上才想起来全局变量起重名了。邻表没初始化。

(最后知道真相的我眼泪掉下来。

说下写法。

因为怕写错。写了两个dfs。

先dp一下每个子树节点。如果有一个根有超过两个不是叶子的子节点。就是不合法的。

在合法的情况下再dp答案。

每个节点的答案就是子节点答案乘积再乘上叶子节点数的阶乘。

另外若这个节点有非叶子的子树。答案乘2。

相当于一个的时候可以把它放在左边或者右边。两个的时候可以互换。

最后1这个根节点。可以选1或者n两个。所以最后答案再乘2。

然后回家改完还是wa。发现一个坑点。

n为1的时候最后答案不用乘2。QAQ。

 # pragma comment(linker, "/STACK:102400000,102400000")
# include <iostream>
# include <cstdio>
# include <cstring>
using namespace std;
typedef long long LL;
const LL mod=1e9+;
# define maxn
int cnt,headlist[maxn],node[maxn],ok;
LL fac[maxn],ans[maxn]; struct node
{
int to,pre;
} edge[*maxn]; void add(int from,int to)
{
cnt++;
edge[cnt].pre=headlist[from];
edge[cnt].to=to;
headlist[from]=cnt;
} void dfs1(int pos,int fa)
{
node[pos]=;
int num=;
for(int i=headlist[pos];i;i=edge[i].pre)
{
int to=edge[i].to;
if(to==fa) continue;
dfs1(to,pos);
if(node[to]>) num++;
if(num>) ok=;
node[pos]+=node[to];
}
return;
} void dfs2(int pos,int fa)
{
int num=,tot=;
ans[pos]=;
for(int i=headlist[pos];i;i=edge[i].pre)
{
int to=edge[i].to;
if(to==fa) continue;
dfs2(to,pos);
tot++;
if(node[to]==) num++;
ans[pos]=(ans[pos]*ans[to])%mod;
}
if(tot-num) ans[pos]=(ans[pos]*(LL))%mod;
ans[pos]=(ans[pos]*fac[num])%mod;
return;
} int main(void)
{
fac[]=(LL);
for(int i=;i<maxn;i++) fac[i]=(fac[i-]*(LL)i)%mod;
int T; cin>>T;
for(int kase=;kase<=T;kase++)
{
cnt=;
memset(headlist,,sizeof(headlist));
int n; scanf("%d",&n);
for(int i=;i<n;i++)
{
int u,v;
scanf("%d%d",&u,&v);
add(u,v);
add(v,u);
}
ok=; dfs1(,);
if(!ok) {printf("Case #%d: 0\n",kase); continue;}
dfs2(,);
if(n>) ans[]=(ans[]*(LL))%mod;
printf("Case #%d: %I64d\n",kase,ans[]);
}
return ;
}

Aguin

2015 Multi-University Training Contest 7的更多相关文章

  1. 2015 Multi-University Training Contest 8 hdu 5390 tree

    tree Time Limit: 8000ms Memory Limit: 262144KB This problem will be judged on HDU. Original ID: 5390 ...

  2. 2015 UESTC Winter Training #8【The 2011 Rocky Mountain Regional Contest】

    2015 UESTC Winter Training #8 The 2011 Rocky Mountain Regional Contest Regionals 2011 >> North ...

  3. 2015 UESTC Winter Training #7【2010-2011 Petrozavodsk Winter Training Camp, Saratov State U Contest】

    2015 UESTC Winter Training #7 2010-2011 Petrozavodsk Winter Training Camp, Saratov State U Contest 据 ...

  4. Root(hdu5777+扩展欧几里得+原根)2015 Multi-University Training Contest 7

    Root Time Limit: 30000/15000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Su ...

  5. 2015 Multi-University Training Contest 6 solutions BY ZJU(部分解题报告)

    官方解题报告:http://bestcoder.hdu.edu.cn/blog/2015-multi-university-training-contest-6-solutions-by-zju/ 表 ...

  6. HDU 5360 Hiking(优先队列)2015 Multi-University Training Contest 6

    Hiking Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

  7. hdu 5288 OO’s Sequence(2015 Multi-University Training Contest 1)

    OO's Sequence                                                          Time Limit: 4000/2000 MS (Jav ...

  8. HDU5294 Tricks Device(最大流+SPFA) 2015 Multi-University Training Contest 1

    Tricks Device Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To ...

  9. hdu 5416 CRB and Tree(2015 Multi-University Training Contest 10)

    CRB and Tree                                                             Time Limit: 8000/4000 MS (J ...

  10. 2015多校联合训练赛 hdu 5308 I Wanna Become A 24-Point Master 2015 Multi-University Training Contest 2 构造题

    I Wanna Become A 24-Point Master Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 ...

随机推荐

  1. uoj 55 紫荆花之恋 动态点分治+替罪羊式重构+treap

    每插入一个点,直接把它当做重心插入原树,当做是动态点分树一样维护 但这样深度会越来越大,所以我们用类似替罪羊的方法 当树失去平衡时,对子树进行一次点分,保证复杂度 #include <cstdi ...

  2. 2-Bom

    前言 window对象是BOM的顶层(核心)对象,所有对象都是通过它延伸出来的,也可以称为window的子对象.由于window是顶层对象,因此调用它的子对象时可以不显示的指明window对象 例如下 ...

  3. Web Service接口返回泛型的问题(System.InvalidCastException: 无法将类型为“System.Collections.Generic.List`1[System.String]”的对象强制转换为类型“System.String[]”)

    在使用C#写Web Service时遇到了个很奇怪的问题.返回值的类型是泛型(我用的是类似List<string>)的接口,测试时发现总是报什么无法转换为对象的错误,百思不得其解. 后来在 ...

  4. (从零开始java开发) IDEA+MAVEN构建一个webapp骨架项目(解决一直downloading问题)

    折腾了一段时间终于解决了, 可能是因为网络问题 xml一直没法访问 maven 骨架生成项目速度慢的令人发指,都在Generating project in Batch mode等待,Idea状态显示 ...

  5. 【IE6的疯狂之二】IE6中PNG Alpha透明(全集)

    ie7,fireofx,opera,及至webkit内核的chrome ,safari….. 这些浏览器均支持png的Alpha透明. 很多人说IE6不支持PNG透明,其实IE支持100%透明的PNG ...

  6. es6语法

    let定义变量,特性: 1,不允许重复定义 2,不存在预解析 3,变量存在于会块级作用域 即{}内部 const : 定义常量,常量的值不能修改,若常量是对象 对象下的属性可修改. 解构赋值语法: 数 ...

  7. NDEF消息解析实例[转]

      问题:按照NDEF消息格式来解析下列Hex串? D1 02 1F 53 70 91 01 0E 54 02  65 6E 68 65 6C 6C 6F 20 77 6F  72 6C 64 51 ...

  8. django 安装记录

    1. 下载django安装包,下载个最新的安装包即可. https://www.djangoproject.com/download/ 2. 在本地解压   tar -xvf  安装包名称 3. 安装 ...

  9. C# lesson3

    一.局部变量和成员变量 1.程序入口(Main)要调用非静态成员(变量或方法)的话,是需要通过对象去调用的: 2.普通方法里面去调用变量或方法的话可以直接调用 成员变量(全局变量):放在Main方法之 ...

  10. Python简记

    1.字符换行: print('ab \ncd \nef')