topcoder srm 310 div1
problem1 link
先计算出最上面、最下面一层,根据最上面一层的数量计算答案。
import java.util.*;
import java.math.*;
import static java.lang.Math.*; public class PyramidOfCubes { public double surface(int K) {
int s=0,m=-1;
for(int i=1;;++i) {
if(s+i*i>=K) {
m=i;
break;
}
s+=i*i;
}
for(int i=m;;--i) {
if(i*i>=K) {
s=i;
break;
}
K-=i*i;
}
double result=0.0;
result+=m*m*2;
result+=(s+m)*(m-s+1)/2*4;
int row=(K+s-1)/s;
int col=K>=s?s:K;
result-=s*4-(row+col)*2;
if(s==m) {
result-=m*m*2-K*2;
}
return result;
}
}
problem2 link
拿一个线段树维护中位数即可。
import java.util.*;
import java.math.*;
import static java.lang.Math.*; public class FloatingMedian { static final int N=65537; static class node {
int L,R,num;
} node[] A=new node[N<<2];
int[] a=null; void build(int t,int L,int R) {
A[t]=new node();
A[t].L=L;
A[t].R=R;
A[t].num=0;
if(L==R) return;
int M=(L+R)>>1;
build(t<<1,L,M);
build(t<<1|1,M+1,R);
} void insert(int t,int p,int d) {
A[t].num+=d;
if(A[t].L==A[t].R) {
return;
} int M=(A[t].L+A[t].R)>>1; if(p<=M) {
insert(t<<1,p,d);
}
else {
insert(t<<1|1,p,d);
}
} int get(int t,int k) {
if(A[t].L==A[t].R){
return A[t].L;
}
if(A[t<<1].num>=k) {
return get(t<<1,k);
}
return get(t<<1|1,k-A[t<<1].num);
} public long sumOfMedians(int seed, int mul, int add, int n, int K) { a=new int[n+1];
a[1]=seed;
for(int i=2;i<=n;++i) {
a[i]=(int)(((long)a[i-1]*mul+add)&65535);
} build(1,0,N-1);
long result=0;
final int T=(K+1)>>1;
for(int i=1;i<=n;++i) {
insert(1,a[i],1);
if(i>=K) {
result+=get(1,T);
insert(1,a[i-K+1],-1);
}
}
return result;
}
}
problem3 link
f[S][k][t]表示已经选择的块的集合为$S$,最上面一个是第$k$块,$t$表示朝下的面的类型,有三种。
import java.util.*;
import java.math.*;
import static java.lang.Math.*; public class BoxTower { int[][][] f=null; int getheight(int[] x,int[] y,int[] z,int k,int t) {
if(t==0) {
return z[k];
}
else if(t==1) {
return y[k];
}
else {
return x[k];
}
} boolean check(int[] x,int[] y,int[] z,int k1,int t1,int k2,int t2) {
int r1=t1==2?y[k1]:x[k1];
int c1=t1==0?y[k1]:z[k1];
int r2=t2==2?y[k2]:x[k2];
int c2=t2==0?y[k2]:z[k2];
return r1>=r2&&c1>=c2||r1>=c2&&c1>=r2;
} public int tallestTower(int[] x, int[] y, int[] z) {
final int n=x.length;
f=new int[1<<n][n][3];
for(int i=0;i<(1<<n);++i) {
for(int j=0;j<n;++j) {
if((i&(1<<j))!=0) {
continue;
}
if(i==0) {
f[1<<j][j][0]=getheight(x,y,z,j,0);
f[1<<j][j][1]=getheight(x,y,z,j,1);
f[1<<j][j][2]=getheight(x,y,z,j,2);
continue;
}
for(int k=0;k<n;++k) {
if((i&(1<<k))==0) {
continue;
}
for(int t1=0;t1<3;++t1) {
for(int t2=0;t2<3;++t2) {
if(check(x,y,z,k,t1,j,t2)) {
int t=f[i][k][t1]+getheight(x,y,z,j,t2);
f[i|1<<j][j][t2]=Math.max(f[i|1<<j][j][t2],t);
}
}
}
}
}
}
int result=0;
for(int i=0;i<(1<<n);++i) {
for(int j=0;j<n;++j) {
for(int k=0;k<3;++k) {
result=Math.max(result,f[i][j][k]);
}
}
}
return result;
}
}
topcoder srm 310 div1的更多相关文章
- Topcoder SRM 643 Div1 250<peter_pan>
Topcoder SRM 643 Div1 250 Problem 给一个整数N,再给一个vector<long long>v; N可以表示成若干个素数的乘积,N=p0*p1*p2*... ...
- Topcoder Srm 726 Div1 Hard
Topcoder Srm 726 Div1 Hard 解题思路: 问题可以看做一个二分图,左边一个点向右边一段区间连边,匹配了左边一个点就能获得对应的权值,最大化所得到的权值的和. 然后可以证明一个结 ...
- topcoder srm 714 div1
problem1 link 倒着想.每次添加一个右括号再添加一个左括号,直到还原.那么每次的右括号的选择范围为当前左括号后面的右括号减去后面已经使用的右括号. problem2 link 令$h(x) ...
- topcoder srm 738 div1 FindThePerfectTriangle(枚举)
Problem Statement You are given the ints perimeter and area. Your task is to find a triangle wi ...
- Topcoder SRM 602 div1题解
打卡- Easy(250pts): 题目大意:rating2200及以上和2200以下的颜色是不一样的(我就是属于那个颜色比较菜的),有个人初始rating为X,然后每一场比赛他的rating如果增加 ...
- Topcoder SRM 627 div1 HappyLettersDiv1 : 字符串
Problem Statement The Happy Letter game is played as follows: At the beginning, several players ...
- Topcoder SRM 584 DIV1 600
思路太繁琐了 ,实在不想解释了 代码: #include<iostream> #include<cstdio> #include<string> #include& ...
- TopCoder SRM 605 DIV1
604的题解还没有写出来呢.先上605的. 代码去practice房间找. 说思路. A: 贪心,对于每个类型的正值求和,如果没有正值就取最大值,按着求出的值排序,枚举选多少个类型. B: 很明显是d ...
- topcoder srm 575 div1
problem1 link 如果$k$是先手必胜那么$f(k)=1$否则$f(k)=0$ 通过对前面小的数字的计算可以发现:(1)$f(2k+1)=0$,(2)$f(2^{2k+1})=0$,(3)其 ...
随机推荐
- php 下载完成后删除文件
最近遇到一个需求:下载用户上传的图片,但是图片不断更新. 1.需要将图片从图片服务器下载到网站后台服务器 2.压缩文件夹生成zip压缩包 3.下载压缩包 4.删除压缩包和临时文件夹 其中遇到了一个问题 ...
- db2修改表结构,增加列,删除列等
增加一列:ALTER TABLE tbname ADD COLUMN columnName datatype; 增加多列:ALTER TABLE tbname ADD COLUMN columnNam ...
- caffe编译环境的错误:..build_release/src/caffe/proto/caffe.pb.h:23:35: fatal error: google/protobuf/arena.h: 没有那个文件
在搭建caffe的环境时出现错误: .build_release/src/caffe/proto/caffe.pb.h:23:35: fatal error: google/protobuf/aren ...
- node.js中net模块创建服务器和客户端(TCP)
node.js中net模块创建服务器和客户端 1.node.js中net模块创建服务器(net.createServer) // 将net模块 引入进来 var net = require(" ...
- sitecore系列教程之Sitecore个性化-配置文件,模式和角色
这是利用Sitecore规则引擎实现数字化转换的三部分系列的第二部分.阅读上一篇文章,通过为您的个性化体验定义内容策略来设置基础. Sitecore有一个非常强大的规则引擎,可以帮助推动个性化的用 ...
- Eclipse-----解决调试源码不进入断点问题
1.Window-->Preferences-->Java-->installed JRES 添加Standard VM 添加完成后,如下图 2.右键点击项目-->Prop ...
- codeforces 975C Valhalla Siege
题意: 有n个巫师站成一列,每个巫师有自己的血量. 一个人射箭攻击他们,每次造成若干点伤害,巫师按照给定的顺序承受伤害,如果伤害大了,那么死掉,伤害落到下一个巫师身上. 如果一轮攻击之后,所有的巫师都 ...
- [openjudge-搜索]哆啦A梦的时光机
题目描述 描述 哆啦A梦有一个神奇的道具:时光机.坐着它,大雄和他的伙伴们能穿越时空,回到过去或者去到未来. 有一天,大雄和他的伙伴们想穿越时空进行探险,可是时光机却出了一点故障,只能进行有限的时空穿 ...
- Windsor
https://github.com/castleproject/Windsor https://github.com/castleproject/Windsor/blob/master/docs/R ...
- LoadLibrary加载动态库失败
[1]LoadLibrary加载动态库失败的可能原因以及解决方案: (1)dll动态库文件路径不对.此场景细分为以下几种情况: 1.1 文件路径的确错误.比如:本来欲加载的是A文件夹下的动态库a.dl ...