ZOJ Monthly, August 2014
A Abs Problem http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5330
找规律题,构造出解。copyright@ts
#include<cstdio>
int main() {
int n,big,sma,id;
while(~scanf("%d",&n)) {
if(n==) {
puts("1 1");
puts("");
puts("");
continue;
}
if(n==) {
puts("1 1");
puts("1 2");
puts("2 1");
continue;
}
if(!((n-)%)||!(n%)) {
sma=;
}
else {
sma=;
}
if(sma) {
if(n&) {
big=n;
id=;
}
else {
big=n-;
id=;
}
}
else {
if(n&) {
big=n-;
id=;
}
else {
big=n;
id=;
}
}
printf("%d %d\n",sma,big);
printf("%d",n);
for(int i=n-;i>=;i--) {
printf(" %d",i);
}
puts("");
if(id==||id==) {
for(int i=n-;i>=;i--) {
printf("%d ",i);
}
printf("%d %d %d\n",n-,n-,n);
}
else {
for(int i=n-; i>=; i--) {
printf("%d ",i);
}
printf("%d\n",n);
}
}
return ;
}
E Easy 2048 Again http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5334
状态压缩dp,只需要存递减的状态。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define mt(a,b) memset(a,b,sizeof(a))
using namespace std;
const int M=;
const int all=<<;
int a[M],dp[][all];
int main(){
int t,n;
int to[];///将输入变成2的x次方
int p2[];///存2的i次方
p2[]=;
for(int i=;i<=;i++){
p2[i]=p2[i-]*;
}
to[]=;
to[]=;
to[]=;
to[]=;
while(~scanf("%d",&t)){
while(t--){
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
a[i]=to[a[i]];
}
mt(dp,-);
int pre=,now=;
dp[pre][]=;
for(int i=;i<=n;i++,now^=,pre^=){
for(int j=;j<all;j++){
if(~dp[pre][j]){
dp[now][j]=max(dp[now][j],dp[pre][j]);///不选
///下面是选
int t=j;///下一个状态
int k=a[i]-;
///dp中第二维0001表示有个2,0011表示有4,2,0111表示8,4,2
int q=(<<k)-;///q为( 比k低一位的位数全是1 )的数
int sum=p2[a[i]];///新得分
if(!(t&q)){///如果比k低的位全是0,才能合并
while((t&(<<k))){
sum+=p2[k+];
k++;
}
q=(<<k)-;
t&=~q;///把比k低的位数全变成0
t|=<<k;
}
else{
t=<<k;///不能合并,产生新递减序列,只有k位是1
}
dp[now][t]=max(dp[now][t],dp[pre][j]+sum);
}
}
}
int ans=;
for(int i=;i<all;i++){
ans=max(ans,dp[pre][i]);
}
printf("%d\n",ans);
}
}
return ;
}
G YY's Minions http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5336
模拟题,怎么说怎么做。
#include<cstdio>
#include<algorithm>
using namespace std;
const int M=;
char op[M];
int mat[][M][M],n,m,f,k,t;
struct G{
int t,x,y;
friend bool operator <(G a,G b){
return a.t<b.t;
}
}g[M*M];
int dx[]={-,-,-,,,,,};
int dy[]={-,,,-,,-,,};
int sum(int x,int y,int pre){
int res=;
for(int i=,tx,ty;i<;i++){
tx=x+dx[i];
ty=y+dy[i];
if(tx>=&&tx<=n&&ty>=&&ty<=m){
if(mat[pre][tx][ty]&){
res++;
}
}
}
return res;
}
int change(int pre,int num){
if(pre==){
if(num==) return ;
return ;
}
if(num==||num==) return ;
return ;
}
char tochar(int x){
if(x==) return 'X';
return x+'';
}
int main(){
while(~scanf("%d",&t)){
while(t--){
scanf("%d%d%d%d",&n,&m,&f,&k);
int pre=,now=;
for(int i=;i<=n;i++){
scanf("%s",op);
for(int j=;j<m;j++){
mat[pre][i][j+]=op[j]-'';
}
}
for(int i=;i<k;i++){
scanf("%d%d%d",&g[i].t,&g[i].x,&g[i].y);
}
sort(g,g+k);
for(int u=,head=;u<=f;u++,pre^=,now^=){
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(mat[pre][i][j]==){
mat[now][i][j]=;
continue;
}
int num=sum(i,j,pre);
mat[now][i][j]=change(mat[pre][i][j],num);
}
}
while(head<k&&g[head].t==u){
mat[now][g[head].x][g[head].y]=;
head++;
}
}
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
putchar(tochar(mat[pre][i][j]));
}
putchar('\n');
}
}
}
return ;
}
用vector就不用排序了。
#include<cstdio>
#include<vector>
using namespace std;
const int M=;
char op[M];
int mat[][M][M],n,m,f,k,t;
struct G{
int x,y;
}p;
vector<G> g[M*M];
int dx[]={-,-,-,,,,,};
int dy[]={-,,,-,,-,,};
int sum(int x,int y,int pre){
int res=;
for(int i=,tx,ty;i<;i++){
tx=x+dx[i];
ty=y+dy[i];
if(tx>=&&tx<=n&&ty>=&&ty<=m){
if(mat[pre][tx][ty]&){
res++;
}
}
}
return res;
}
int change(int pre,int num){
if(pre==){
if(num==) return ;
return ;
}
if(num==||num==) return ;
return ;
}
char tochar(int x){
if(x==) return 'X';
return x+'';
}
int main(){
while(~scanf("%d",&t)){
while(t--){
scanf("%d%d%d%d",&n,&m,&f,&k);
int pre=,now=;
for(int i=;i<=n;i++){
scanf("%s",op);
for(int j=;j<m;j++){
mat[pre][i][j+]=op[j]-'';
}
}
for(int i=;i<=f;i++){
g[i].clear();
}
for(int i=,ti;i<k;i++){
scanf("%d%d%d",&ti,&p.x,&p.y);
g[ti].push_back(p);
}
for(int u=,head=;u<=f;u++,pre^=,now^=){
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
if(mat[pre][i][j]==){
mat[now][i][j]=;
continue;
}
int num=sum(i,j,pre);
mat[now][i][j]=change(mat[pre][i][j],num);
}
}
int lg=g[u].size();
for(int i=;i<lg;i++){
mat[now][g[u][i].x][g[u][i].y]=;
}
}
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
putchar(tochar(mat[pre][i][j]));
}
putchar('\n');
}
}
}
return ;
}
H Machine http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5337
树的深搜。邻接表快一些
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#define mt(a,b) memset(a,b,sizeof(a))
using namespace std;
const int M=;
struct G{
struct E{
int v,next;
}e[M<<];
int le,head[M];
void init(){
le=;
mt(head,-);
}
void add(int u,int v){
e[le].v=v;
e[le].next=head[u];
head[u]=le++;
}
}g;
vector<int> son[M];
int dfs(int u,int fa){
son[u].clear();
for(int i=g.head[u];~i;i=g.e[i].next){
int v=g.e[i].v;
if(v!=fa){
son[u].push_back(dfs(v,u));
}
}
sort(son[u].begin(),son[u].end());
int res=,ls=son[u].size();
for(int i=;i<ls;i++){
res=max(res,son[u][i]+ls-i-);
}
return res;
}
int main(){
int n;
while(~scanf("%d",&n)){
g.init();
for(int v=,u;v<=n;v++){
scanf("%d",&u);
g.add(u,v);
g.add(v,u);
}
printf("%d\n",dfs(,-));
}
return ;
}
vector慢一些
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
const int M=;
vector<int> g[M],son[M];
int dfs(int u,int fa){
son[u].clear();
int lu=g[u].size();
for(int i=;i<lu;i++){
int v=g[u][i];
if(v!=fa){
son[u].push_back(dfs(v,u));
}
}
sort(son[u].begin(),son[u].end());
int res=,ls=son[u].size();
for(int i=;i<ls;i++){
res=max(res,son[u][i]+ls-i-);
}
return res;
}
int main(){
int n;
while(~scanf("%d",&n)){
for(int i=;i<=n;i++){
g[i].clear();
}
for(int v=,u;v<=n;v++){
scanf("%d",&u);
g[u].push_back(v);
g[v].push_back(u);
}
printf("%d\n",dfs(,-));
}
return ;
}
I Incircle and Circumcircle http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5338
机智的用不对的三分过了。定义圆都在y轴,定义三角形一个点在圆心,定义三角形是等腰的。
#include<cstdio>
#include<cmath>
const double eps=1e-;
double r,R;
double f(double y) {
double Y=*R*(-(r*r)/(y*y));
return fabs(Y-y-r);
}
double TernarySearch(double L,double R) { // 三分查找
while(R-L>eps) {
double LL=(L*+R)/;
double RR=(L+R*)/;
if(f(LL)<f(RR)) //f为对应的值 这里求最小值
R=RR;
else
L=LL;
}
return L;
}
int main(){
int t1,t2;
while(~scanf("%d%d",&t1,&t2)){
if(t1*>t2){
puts("NO Solution!");
continue;
}
r=t1;
R=t2;
double ansy=TernarySearch(r,R+R-r);
ansy+=r;
double tmp=ansy-r;
double sinxita=r/tmp;
double cosxita=sqrt(tmp*tmp-r*r)/tmp;
double a=ansy*tmp/sqrt(tmp*tmp-r*r);
double b=a;
double c=*a*r/tmp;
printf("%.18f %.18f %.18f\n",a,b,c);
}
return ;
}
end
ZOJ Monthly, August 2014的更多相关文章
- 浙大月赛ZOJ Monthly, August 2014
Abs Problem Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge Alice and Bob is playing a ga ...
- 135 - ZOJ Monthly, August 2014
135 - ZOJ Monthly, August 2014 A:构造问题,推断序列奇偶性.非常easy发现最小值不是1就是0.最大值不是n就是n - 1,注意细节去构造就可以 E:dp.dp[i][ ...
- ZOJ Monthly, November 2014
做了一次月赛,没想到这么难,加上后来补上的题目也只有3个题.第一名也只有4个题啊啊啊啊~.其中两道还是水题.留坑慢慢补上来. 3832 Tilt Cylinder 给定如图所示有盖圆柱体,R,H,水面 ...
- ZOJ Monthly, June 2014 月赛BCDEFGH题题解
比赛链接:点击打开链接 上来先搞了f.c,,然后发现状态不正确,一下午都是脑洞大开,, 无脑wa,无脑ce...一样的错犯2次.. 硬着头皮搞了几发,最后20分钟码了一下G,不知道为什么把1直接当成不 ...
- 记次浙大月赛 134 - ZOJ Monthly, June 2014
链接 虽做出的很少,也记录下来,留着以后来补..浙大题目质量还是很高的 B 并查集的一些操作,同类和不同类我是根据到根节点距离的奇偶判断的,删点是直接新加一个点,记得福大月赛也做过类似的,并差集的这类 ...
- 137 - ZOJ Monthly, November 2014 - J Poker Face
Poker Face Time Limit: 2 Seconds Memory Limit: 65536 KB As is known to all, coders are lack of ...
- ZOJ Monthly, June 2014 解题报告
A.Another Recurrence Sequence problemId=5287">B.Gears 题目大意:有n个齿轮,一開始各自为一组.之后进行m次操作,包含下面4种类型: ...
- ZOJ 4010 Neighboring Characters(ZOJ Monthly, March 2018 Problem G,字符串匹配)
题目链接 ZOJ Monthly, March 2018 Problem G 题意 给定一个字符串.现在求一个下标范围$[0, n - 1]$的$01$序列$f$.$f[x] = 1$表示存在一种 ...
- ZOJ 4009 And Another Data Structure Problem(ZOJ Monthly, March 2018 Problem F,发现循环节 + 线段树 + 永久标记)
题目链接 ZOJ Monthly, March 2018 Problem F 题意很明确 这个模数很奇妙,在$[0, mod)$的所有数满足任意一个数立方$48$次对$mod$取模之后会回到本身. ...
随机推荐
- Cocos2d-JS坐标系
在图形图像和游戏应用开发中坐标系是非常重要的,我们在Android和iOS等平台应用开发的时候使用的二维坐标系它的原点是在左上角的.而在Cocos2d-JS坐标系中它原点是在左下角的,而且Cocos2 ...
- HTML+CSS学习笔记(9)- CSS的继承、层叠和特殊性
标签:HTML+CSS 继承 CSS的某些样式是具有继承性的,那么什么是继承呢?继承是一种规则,它允许样式不仅应用于某个特定html标签元素,而且应用于其后代.比如下面代码:如某种颜色应用于p标签,这 ...
- 【学习笔记】【C语言】变量
1. 什么是变量 当一个数据的值需要经常改变或者不确定时,就应该用变量来表示.比如游戏积分. 2. 定义变量 1> 目的 任何变量在使用之前,必须先进行定义. 定义变量的目的是:在内存中分配一块 ...
- 转载:Github 简明教程
如果你是一枚Coder,但是你不知道Github,那么我觉的你就不是一个菜鸟级别的Coder,因为你压根不是真正Coder,你只是一个Code搬运工. 但是你如果已经在读这篇文章了,我觉的你已经知道G ...
- 如何自学java迅速成为java高手
要想学好Java,首先要知道Java的大致分类.我们知道,自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ...
- App性能提升方法
总体思路:精简请求数 1.css sprit 图像拼合,将所有可拼接的所有图像拼接为一整张图像,然后再利用css中的position定位来处理,降低图片的请求数 2.懒加载:只渲染客户端用户可见区域[ ...
- MySQL 密码增强插件
200 ? "200px" : this.width)!important;} --> 介绍 以前没有太注意MySQL密码安全策略的配置方法,只是人为了将密码设为复杂密码,但 ...
- Ubuntu系统下允许Apache的mod_rewrite功能
首先,使能apache的rewirte模块,在shell里输入下边的命令: sudo a2enmod rewrite 然后重启一下webserver使更改生效 sudo service apache2 ...
- Delphi 和 C++Builder 2014年及以后技术路线图
RAD Studio, Delphi 和 C++Builder 2014年及以后技术路线图 By: Embarcadero News 内容源自Embarcadero新闻组,本人水平有限,欢迎各位高人修 ...
- SQL Server 2012 BI 学习 第一天
了解数据源,数据源视图,多维数据集,维度 数据源:一个数据库或者其它数据链接,SSAS不支持使用模拟功能来处理 OLAP 对象.模拟信息选择“使用服务帐户” 数据源视图:DSV是元数据的单个统一视图, ...