腾讯笔试
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); } }
#实习#