problem1 link

直接模拟即可。

import java.util.*;
import java.math.*;
import static java.lang.Math.*; public class Multifactorial { public String calcMultiFact(int n, int k) {
long result=1;
final long nlimit=1000000000000000000l;
while(true) { if(result>nlimit/n) {
return "overflow";
}
result*=n;
if(n<=k) {
break;
}
n-=k;
}
return Long.toString(result);
}
}

problem2 link

记录到达$(x,y)$的步数以及当前新一步的和,dp即可。

import java.util.*;
import java.math.*;
import static java.lang.Math.*; public class ExpensiveTravel { static class Fraction {
public int a,b;
public Fraction() {
a=1;
b=1;
}
public Fraction(int a,int b) {
this.a=a;
this.b=b;
} public static int gcd(int x,int y) {
if(y==0) {
return x;
}
return gcd(y,x%y);
} private Fraction simple() {
int t=gcd(a,b);
a/=t;
b/=t;
return this;
} public Fraction add(Fraction p) {
int bb=p.b*b;
int aa=a*p.b+p.a*b;
return new Fraction(aa,bb).simple();
}
public boolean ok() {
return a>b;
} public boolean less(Fraction p) {
return a*p.b<p.a*b;
}
} static class Node {
public Fraction pref;
public Fraction f;
public int cost;
public boolean inq; public Node() {
f=new Fraction(0,1);
cost=0;
inq=false;
} Node add(int t) {
Node p=new Node();
p.f=new Fraction(f.a,f.b).add(new Fraction(1,t));
p.cost=cost;
p.inq=inq; if(p.f.ok()) {
++p.cost;
p.f=pref.add(new Fraction(1,t));
}
p.pref=new Fraction(1,t);
return p;
} public boolean less(Node p) {
return cost<p.cost||cost==p.cost&&f.less(p.f);
} public int result() {
if(cost==-1) {
return -1;
}
return cost+1;
} } public int minTime(String[] m, int startRow, int startCol, int endRow, int endCol) {
final int N=m.length;
final int M=m[0].length();
int[][] g=new int[N][M];
for(int i=0;i<N;++i) {
for(int j=0;j<M;++j) {
char c=m[i].charAt(j);
g[i][j]=c-'0';
}
}
--startRow;
--startCol;
--endRow;
--endCol;
if(g[startRow][startCol]==1||g[endRow][endCol]==1) {
return -1;
} Node[][] f=new Node[N][];
for(int i=0;i<N;++i) {
f[i]=new Node[M];
for(int j=0;j<M;++j) {
f[i][j]=new Node();
f[i][j].cost=-1;
}
} Queue<Integer> queue=new LinkedList<>();
f[startRow][startCol].f=new Fraction(1,g[startRow][startCol]);
f[startRow][startCol].pref=new Fraction(1,g[startRow][startCol]);
f[startRow][startCol].inq=true;
f[startRow][startCol].cost=0;
queue.offer(startRow*100+startCol); final int[] dx={0,0,1,-1};
final int[] dy={1,-1,0,0}; while(!queue.isEmpty()) {
final int x=queue.peek()/100;
final int y=queue.peek()%100;
queue.poll();
f[x][y].inq=false;
if(x==endRow&&y==endCol) {
continue;
}
for(int i=0;i<4;++i) {
final int xx=x+dx[i];
final int yy=y+dy[i];
if(xx<0||xx>=N||yy<0||yy>=M) {
continue;
}
if(g[xx][yy]==1) {
continue;
}
Node t=f[x][y].add(g[xx][yy]);
if(f[xx][yy].cost==-1||t.less(f[xx][yy])) {
f[xx][yy]=t;
if(!f[xx][yy].inq) {
f[xx][yy].inq=true;
queue.offer(xx*100+yy);
}
}
}
}
return f[endRow][endCol].result();
}
}

problem3 link

根据期望的可加性,A组中每个数$x$比B组中每个小于$x$的值$y$的贡献值$\frac{(x-y)^{2}}{n}$为正,对于每个大于$x$的值$z$的贡献值$\frac{(x-z)^{2}}{n}$为负。

import java.util.*;
import java.math.*;
import static java.lang.Math.*; public class RandomFights { int[] get(int[] X,int n) {
final int m=X.length;
int j=0;
int[] R=new int[n];
for(int i=0;i<n;++i) {
R[i]=X[j];
int s=(j+1)%m;
X[j]=((X[j]^X[s])+13)%49999;
j=s;
}
return R;
} BigInteger int2big(long x) {
return new BigInteger(Long.toString(x));
} public double expectedNrOfPoints(int[] A,int[] B,int n) {
int[] a=get(A,n);
int[] b=get(B,n); Arrays.sort(a);
Arrays.sort(b); BigInteger nxt=BigInteger.ZERO,nxt2=BigInteger.ZERO;
for(int i=0;i<n;++i) {
nxt=nxt.add(int2big(b[i]));
nxt2=nxt2.add(int2big((long)b[i]*b[i]));
} BigInteger result=BigInteger.ZERO;
BigInteger pre=BigInteger.ZERO,pre2=BigInteger.ZERO;
int k=0;
for(int i=0;i<n;++i) {
while(k<n&&b[k]<=a[i]) {
pre=pre.add(int2big(b[k]));
pre2=pre2.add(int2big((long)b[k]*b[k]));
nxt=nxt.subtract(int2big(b[k]));
nxt2=nxt2.subtract(int2big((long)b[k]*b[k]));
++k;
} BigInteger tmp=int2big((long)k*a[i]*a[i]).subtract(pre.multiply(int2big(a[i]*2))).add(pre2);
result=result.add(tmp);
tmp=int2big((long)(n-k)*a[i]*a[i]).subtract(nxt.multiply(int2big(a[i]*2))).add(nxt2);
result=result.subtract(tmp); }
BigInteger[] last=result.divideAndRemainder(int2big(n));
return Double.valueOf(last[0].toString())+Double.valueOf(last[1].toString())/n;
}
}

  

topcoder srm 335 div1的更多相关文章

  1. Topcoder SRM 643 Div1 250<peter_pan>

    Topcoder SRM 643 Div1 250 Problem 给一个整数N,再给一个vector<long long>v; N可以表示成若干个素数的乘积,N=p0*p1*p2*... ...

  2. Topcoder Srm 726 Div1 Hard

    Topcoder Srm 726 Div1 Hard 解题思路: 问题可以看做一个二分图,左边一个点向右边一段区间连边,匹配了左边一个点就能获得对应的权值,最大化所得到的权值的和. 然后可以证明一个结 ...

  3. topcoder srm 714 div1

    problem1 link 倒着想.每次添加一个右括号再添加一个左括号,直到还原.那么每次的右括号的选择范围为当前左括号后面的右括号减去后面已经使用的右括号. problem2 link 令$h(x) ...

  4. topcoder srm 738 div1 FindThePerfectTriangle(枚举)

    Problem Statement      You are given the ints perimeter and area. Your task is to find a triangle wi ...

  5. Topcoder SRM 602 div1题解

    打卡- Easy(250pts): 题目大意:rating2200及以上和2200以下的颜色是不一样的(我就是属于那个颜色比较菜的),有个人初始rating为X,然后每一场比赛他的rating如果增加 ...

  6. Topcoder SRM 627 div1 HappyLettersDiv1 : 字符串

    Problem Statement      The Happy Letter game is played as follows: At the beginning, several players ...

  7. Topcoder SRM 584 DIV1 600

    思路太繁琐了 ,实在不想解释了 代码: #include<iostream> #include<cstdio> #include<string> #include& ...

  8. TopCoder SRM 605 DIV1

    604的题解还没有写出来呢.先上605的. 代码去practice房间找. 说思路. A: 贪心,对于每个类型的正值求和,如果没有正值就取最大值,按着求出的值排序,枚举选多少个类型. B: 很明显是d ...

  9. 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)其 ...

随机推荐

  1. MyBatis基础入门《四》接口方式.Select查询集合

    MyBatis基础入门<四>接口方式.Select查询集合 描述: 在<MyBatis基础入门<二>Select查询>中有说过,SQLSession有两种用法,这里 ...

  2. EF性能优化

    下面总结了一些在使用EF的过程中应当特别注意的地方,避免大家再走弯路. 1.分清真分页和假分页 大家都知道分页分为真分页和假分页,并且假分页是特别耗费性能的.我们在使用的过程中也是以真分页为主,但是在 ...

  3. 转自大神的KM想法

    我第一次理解KM算法看到大神的讲解不胜感激这km挺神奇的接下来就见识一下这个大牛的吧 转自 http://blog.csdn.net/wuxinxiaohuangdou/article/details ...

  4. EasyUI表格DataGrid前端分页和后端分页的总结

    Demo简介 Demo使用Java.Servlet为后台代码(数据库已添加数据),前端使用EasyUI框架,后台直接返回JSON数据给页面 1.配置Web.xml文件 <?xml version ...

  5. 重装win10系统

    一. 1.搜索是最好的老师,这个是非常重要的 2.数据的二备份,和三备份 二. 待完善

  6. Spring boot FastJson

    介绍:FastJson 是ailibaba 的一款解析Json的开源框架 使用方式1 引入jar 包 <dependency>    <groupId>com.alibaba& ...

  7. SQL优化(转)

    1. 负向条件查询不能使用索引 select * from order where status!=0 and stauts!=1 not in/not exists都不是好习惯 可以优化为in查询: ...

  8. css的优先级 和 权重

    之前写页面样式时,有时会遇到 用多条样式定义规则对同一个元素进行样式设置的时候,当时想到的就是  按css选择器的优先级来搞定这个问题,说实话当时也就只记得 内嵌样式 > id > cla ...

  9. jenkins3

    Jenkins是基于java开发的. GitHub Git (熟练使用) Doocker (了解) Jenkins (熟练使用) Django (熟练使用) Angularjs (了解) Sentry ...

  10. 用Javascript,DHTML控制表格的某一列的显示与隐藏

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or ...