题目链接:http://codeforces.com/contest/1159
B:
给你一个数列,问你最大的k是多少,k<=min(a[i],a[j])/|i-j| 。我们可以记录每个点到其他点的最远距离,点在左半边的距离是n-i,点在右半边的距离是i-1.然后扫一遍。
AC代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
public class Main {
static StreamTokenizer st=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
public static void main(String[] args) {
int n=nextInt();
int a[]=new int[n+1];
int dis[]=new int[n+1];//记录每个点到其它点的最远距离
for(int i=1;i<=n;i++){
a[i]=nextInt();
if(i<=n/2){
dis[i]=n-i;
}else{
dis[i]=i-1;
}
}
int k=1000000001;
int minnum=0;
for(int i=1;i<=n;i++){
if(i<=n/2)
minnum=Math.min(a[i], a[n]);
else
minnum=Math.min(a[1], a[i]);
int tp=minnum/dis[i];
if(tp<k)
k=tp;
}
System.out.println(k);
}
static int nextInt(){
try {
st.nextToken();
} catch (IOException e) {
e.printStackTrace();
}
return (int)st.nval;
}
}
C题:
告诉你有n个男生,m个女生,下一行给你每个男生给每个女生的最小糖果数量,在下一行告诉你,每个女生从单个男生那收到的最大糖果数量。问你所有男生准备的糖果数量的最小值。
AC代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.Arrays;
//贪心
//如果男生的最大值大于女生的最小值,就输出-1
//如果男生的最大值等于女生的最小值,就用这个男生送给所有女生需要的糖果数,其他男生就送他们的最小值
//如果男生的最大值大于女生的最小值,就用这个男生送除了女生最小值的所有女生,用第二大的男生送女生最小的,剩下的男生就送他们的最小值
public class Main {
static StreamTokenizer st=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
public static void main(String[] args) {
int n=nextInt();
int m=nextInt();
long b[]=new long[n];
long g[]=new long[m];
for(int i=0;i<n;i++)
b[i]=nextInt();
for(int i=0;i<m;i++)
g[i]=nextInt();
Arrays.sort(b);
Arrays.sort(g);
if(b[n-1]>g[0])
System.out.println("-1");
else if(b[n-1]==g[0]){
long sum=0;
for(int i=0;i<m;i++)
sum+=g[i];
for(int i=0;i<n-1;i++){
sum+=(m*b[i]);
}
System.out.println(sum);
}else{
long sum=0;
for(int i=0;i<m;i++)
sum+=g[i];
sum+=b[n-1];
sum+=(b[n-2]*(m-1));
for(int i=0;i<n-2;i++){
sum+=(m*b[i]);
}
System.out.println(sum);
}
}
static int nextInt(){
try {
st.nextToken();
} catch (IOException e) {
e.printStackTrace();
}
return (int)st.nval;
}
}