栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

历届真题 乘积最大【第九届】【省赛】【B组】蓝桥杯 2018 Java

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

历届真题 乘积最大【第九届】【省赛】【B组】蓝桥杯 2018 Java

package zhenti;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;

public class zuida{
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int k = scanner.nextInt();
		int beichushu = 1000000009;
		ArrayList zhengArrayList = new ArrayList<>();
		ArrayList fuArrayList = new ArrayList<>();
		int zero = 0;
		int temp = 0;
		for (int i = 1; i <= n; i++) {
			temp = scanner.nextInt();
			if (temp > 0) {
				zhengArrayList.add(temp);
			}else if (temp < 0) {
				fuArrayList.add(temp);
			}else {
				zero++;
			}
		}
		scanner.close();
		zhengArrayList.sort(new Comparator() {
			@Override
			public int compare(Integer o1, Integer o2) {
				// TODO Auto-generated method stub
				return o2 - o1;
			}
		});
		fuArrayList.sort(new Comparator() {
			@Override
			public int compare(Integer o1, Integer o2) {
				// TODO Auto-generated method stub
				return o1 - o2;
			}
		});
		long ans = 1;
		int zhenglength = zhengArrayList.size();
		int fulength = fuArrayList.size();
		if (zhenglength == n) {
			for (int i = 1; i <= k; i++) {
				ans = (zhengArrayList.get(i -1) * (long)ans) % beichushu;
			}
		}else if (fulength == n) {
			if(k % 2 ==1) {
				for (int i = 1; i <= k; i++) {
					ans = (ans * fuArrayList.get(fulength - i)) % beichushu;
				}
			}else {
				for (int i = 1; i <= k; i++) {
					ans = (fuArrayList.get(i -1) * ans) % beichushu;
				}
			}
		}else if(zero == n) {
			ans = 0;
		}else if(fulength == 0) {
			if (k > zhenglength) {
				ans = 0;
			}else if(k <= zhenglength) {
				for (int i = 1; i <= k; i++) {
					ans = (zhengArrayList.get(i -1) * ans) % beichushu;
				}
			}
		}else if(zhenglength == 0) {
			if(k > fulength) {
				ans = 0;
			}else if(k <= fulength) {
				if(k % 2 ==1) {
					for (int i = 1; i <= k; i++) {
						ans = (ans * fuArrayList.get(fulength - i)) % beichushu;
					}
				}else {
					for (int i = 1; i <= k; i++) {
						ans = (fuArrayList.get(i -1) * ans) % beichushu;
					}
				}
			}
		}else if(zero == 0) {
			int muqianzheng = 0;
			int muqianfu = 0;
			for (int i = 1; i <= k; i++) {
				if (muqianzheng == zhenglength) {
					ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
					muqianfu++;
				}else if(muqianfu == fulength) {
					ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
					muqianzheng++;
				}else if (zhengArrayList.get(muqianzheng) >= ((-1) * fuArrayList.get(muqianfu))) {
					ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
					muqianzheng++;
				}else {
					ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
					muqianfu++;
				}
			}
			if (ans < 0 && k < (zhenglength + fulength)) {
				if (muqianfu == fulength) {
					ans = 1;
					muqianzheng = 0;
					muqianfu = 0;
					for (int i = 1; i <= k; i++) {
						if (muqianzheng == zhenglength) {
							ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
							muqianfu++;
						}else if(muqianfu == fulength - 1) {
							ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
							muqianzheng++;
						}else if (zhengArrayList.get(muqianzheng) >= (-1) * fuArrayList.get(muqianfu)) {
							ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
							muqianzheng++;
						}else {
							ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
							muqianfu++;
						}
					}
					//ans = ans / fuArrayList.get(muqianfu - 1) * zhengArrayList.get(muqianzheng);
				}else if (muqianzheng == zhenglength) {
					ans = 1;
					muqianzheng = 0;
					muqianfu = 0;
					for (int i = 1; i <= k; i++) {
						if (muqianzheng == zhenglength - 1) {
							ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
							muqianfu++;
						}else if(muqianfu == fulength) {
							ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
							muqianzheng++;
						}else if (zhengArrayList.get(muqianzheng) >= ((-1) * fuArrayList.get(muqianfu))) {
							ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
							muqianzheng++;
						}else {
							ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
							muqianfu++;
						}
					}
					//ans = ans/ zhengArrayList.get(muqianzheng - 1) * fuArrayList.get(muqianfu);
				}else {
					int ans1 = Math.abs(fuArrayList.get(muqianfu) / zhengArrayList.get(muqianzheng - 1));
					int ans2 = Math.abs(zhengArrayList.get(muqianzheng) / fuArrayList.get(muqianfu - 1));
					if(ans1 > ans2) {
						ans = 1;
						int maxzheng = muqianzheng - 1;
						muqianzheng = 0;
						muqianfu = 0;
						for (int i = 1; i <= k; i++) {
							if (muqianzheng == maxzheng) {
								ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
								muqianfu++;
							}else if(muqianfu == fulength) {
								ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
								muqianzheng++;
							}else if (zhengArrayList.get(muqianzheng) >= (-1) * fuArrayList.get(muqianfu)) {
								ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
								muqianzheng++;
							}else {
								ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
								muqianfu++;
							}
						}
					}else {
						ans = 1;
						int maxfu = muqianfu - 1;
						muqianzheng = 0;
						muqianfu = 0;
						for (int i = 1; i <= k; i++) {
							if (muqianzheng == zhenglength) {
								ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
								muqianfu++;
							}else if(muqianfu == maxfu) {
								ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
								muqianzheng++;
							}else if (zhengArrayList.get(muqianzheng) >= (-1) * fuArrayList.get(muqianfu)) {
								ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
								muqianzheng++;
							}else {
								ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
								muqianfu++;
							}
						}
					}
				}
			}
		}else {
			if (k > zhenglength + fulength) {
				ans = 0;
			}else {
				int muqianzheng = 0;
				int muqianfu = 0;
				for (int i = 1; i <= k; i++) {
					if (muqianzheng == zhenglength) {
						ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
						muqianfu++;
					}else if(muqianfu == fulength) {
						ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
						muqianzheng++;
					}else if (zhengArrayList.get(muqianzheng) >= (-1) * fuArrayList.get(muqianfu)) {
						ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
						muqianzheng++;
					}else {
						ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
						muqianfu++;
					}
				}
				if (ans < 0 && k < (zhenglength + fulength)) {
					if (muqianfu == fulength) {
						ans = 1;
						muqianzheng = 0;
						muqianfu = 0;
						for (int i = 1; i <= k; i++) {
							if (muqianzheng == zhenglength) {
								ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
								muqianfu++;
							}else if(muqianfu == fulength - 1) {
								ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
								muqianzheng++;
							}else if (zhengArrayList.get(muqianzheng) >= (-1) * fuArrayList.get(muqianfu)) {
								ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
								muqianzheng++;
							}else {
								ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
								muqianfu++;
							}
						}
						//ans = ans / fuArrayList.get(muqianfu - 1) * zhengArrayList.get(muqianzheng);
					}else if (muqianzheng == zhenglength) {
						ans = 1;
						muqianzheng = 0;
						muqianfu = 0;
						for (int i = 1; i <= k; i++) {
							if (muqianzheng == zhenglength - 1) {
								ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
								muqianfu++;
							}else if(muqianfu == fulength) {
								ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
								muqianzheng++;
							}else if (zhengArrayList.get(muqianzheng) >= (-1) * fuArrayList.get(muqianfu)) {
								ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
								muqianzheng++;
							}else {
								ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
								muqianfu++;
							}
						}
						//ans = ans/ zhengArrayList.get(muqianzheng - 1) * fuArrayList.get(muqianfu);
					}else {
						int ans1 = Math.abs(fuArrayList.get(muqianfu) / zhengArrayList.get(muqianzheng - 1));
						int ans2 = Math.abs(zhengArrayList.get(muqianzheng) / fuArrayList.get(muqianfu - 1));
						if(ans1 > ans2) {
							ans = 1;
							int maxzheng = muqianzheng - 1;
							muqianzheng = 0;
							muqianfu = 0;
							for (int i = 1; i <= k; i++) {
								if (muqianzheng == maxzheng) {
									ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
									muqianfu++;
								}else if(muqianfu == fulength) {
									ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
									muqianzheng++;
								}else if (zhengArrayList.get(muqianzheng) >= (-1) * fuArrayList.get(muqianfu)) {
									ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
									muqianzheng++;
								}else {
									ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
									muqianfu++;
								}
							}
						}else {
							ans = 1;
							int maxfu = muqianfu - 1;
							muqianzheng = 0;
							muqianfu = 0;
							for (int i = 1; i <= k; i++) {
								if (muqianzheng == zhenglength) {
									ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
									muqianfu++;
								}else if(muqianfu == maxfu) {
									ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
									muqianzheng++;
								}else if (zhengArrayList.get(muqianzheng) >= (-1) * fuArrayList.get(muqianfu)) {
									ans = (zhengArrayList.get(muqianzheng) * ans) % beichushu;
									muqianzheng++;
								}else {
									ans = (fuArrayList.get(muqianfu) * ans) % beichushu;
									muqianfu++;
								}
							}
						}
					}
				}
			}
		}
		System.out.println(ans);
	}
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/764362.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号