腾讯笔试
1.找规律,最终结果是(n/(2*m))*m*m,注意数据类型,用long。
import java.util.Scanner;
public class ReverseSe {
public static long solve(long n,long m)
{
long ans=0;
long k=1;
long t=n/(2*m);
ans=t*m*m;
return ans;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
long n=scanner.nextLong();
long m=scanner.nextLong();
System.out.println(solve(n, m));
}
}
2.相当于用A,B两种长度的来凑k,可以通过min(k/A,x)来控制A的个数,然后来确定是否存在B的匹配方法,注意边界以及是否刚好凑齐
#-*-coding:utf-8 -*- def solve(a,b): w=1 u=1 for i in range(1,a+1): w*=i for i in range(a): u*=(b-i) return u/w k=int(raw_input()) A,x,B,y=map(int,raw_input().split()) ans=0 t=k/A for i in range(t+1): if(i<=x): temp=k-i*A e=temp%B q=temp/B if(e==0 and q<y): ans+=solve(q,y)*solve(i,x) print ans%1000000007
3.我的思路就是先读取数据,放进两个二维数组,然后对两个数组都进行降序排列,然后从任务最大的开始遍历,观察是否有满足条件的机器人。
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Robot {
public static void sort(int[][]ob,final int[] order)
{
Arrays.sort(ob,new Comparator<Object>() {
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
int[] one=(int[])o1;
int[] two=(int[])o2;
for(int i=0;i<order.length;i++)
{
int k=order[i];
if(one[k]<two[k])
return 1;
else if(one[k]>two[k])
return -1;
else continue;
}
return 0;
}
});
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int m=scanner.nextInt();
int[][] robot=new int[n][2];
int[][] works=new int[m][2];
for(int i=0;i<n;i++)
{
robot[i][0]=scanner.nextInt();
robot[i][1]=scanner.nextInt();
}
for(int i=0;i<m;i++)
{
works[i][0]=scanner.nextInt();
works[i][1]=scanner.nextInt();
}
final int[] order= {0,1};
sort(robot,order);
sort(works, order);
int i=0;
int j=0;
long ans=0;
int k=0;
while(i<n&&j<m) {
if(robot[i][0]>=works[j][0]&&robot[i][1]>=works[j][1])
{
ans+=200*works[j][0]+3*works[j][1];
k++;
i++;
j++;
}
else
{
j++;
}
}
System.out.println(k+" "+ans);
}
}
#实习#
顺丰集团工作强度 369人发布
