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的更多相关文章
-
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 ...
-
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 ...
-
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 据 ...
-
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 ...
-
2015 Multi-University Training Contest 6 solutions BY ZJU(部分解题报告)
官方解题报告:http://bestcoder.hdu.edu.cn/blog/2015-multi-university-training-contest-6-solutions-by-zju/ 表 ...
-
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 ...
-
hdu 5288 OO’s Sequence(2015 Multi-University Training Contest 1)
OO's Sequence Time Limit: 4000/2000 MS (Jav ...
-
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 ...
-
hdu 5416 CRB and Tree(2015 Multi-University Training Contest 10)
CRB and Tree Time Limit: 8000/4000 MS (J ...
-
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 ...
随机推荐
-
低版本GCC程序向高版本移植的兼容性问题
将低版本gcc编译过的程序移植到高版本GCC时, 可能会出现一些兼容性问题. 原因是, 为了适应新的标准,一些旧的语法规则被废弃了. 关于这方面的一些具体资料可从该处查询. 这里只是自己遇到的其中一个 ...
-
自动拒绝恶意IP远程登录Linux服务器脚本
当我们已经配置了iptables防火墙,我们允许22端口对外网所有人访问,当然这也是为了方便,我们在任何地方都连接上,没有做VPN,也没有做ssh密钥验证,但是我们的密码设置得非常复杂,大小写.特殊符 ...
-
Tomcat系列(7)——Tomcat类加载机制
1. 核心部分 1. 类加载器: 通过一个类的全限定名来获取描述此类的二进制字节流. 对于任意一个类,都需要由加载他的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都拥有一 ...
-
Windows应急响应常识
Windows 应急响应 常见事件ID 1102 清理审计日志 4624 账号登陆成功 4625 账号登陆失败 4672 授予特殊权限 4720 创建用户 4726 删除用户 4728 将成员添加到启 ...
-
UI自动化(四)css样式
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
-
[hive] hive cli 命令行
hive 版本 1.2.2 帮助信息 -d 属性 set 和 set -v 变量 hive --define 和 hivevar:变量名字 -e 不启动hive,执行完成后自动退出. ...
-
Spring boot 开发WebService遇到的问题之一
当pom.xml文件中的配置: <artifactId>spring-boot-starter-parent</artifactId><version>2.0.6. ...
-
(转)Javascript模块化编程(二):AMD规范
转自 ruanyifeng 系列目录: Javascript模块化编程(一):模块的写法 Javascript模块化编程(二):AMD规范 Javascript模块化编程(三):Require.js的 ...
-
[php]http响应头解析
(Status-Line) HTTP/ OK Cache-Control no-cache Content-Length Content-Type image/gif Date Sat, Dec :: ...
-
工作中常用的Git操作--------(一)
今天主要记录一下平常工作当中使用的git操作: 1.git的安装这里省略: 2.git的操作指令: 在项目开发中,经常是拉去经理已经搭建好的一个项目,也就是给我们一个git地址.比如:http://g ...