| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:Java 实现,忙了一下午,AC了还是很开心的,贴代码(c++风格)In Reply To:Java 实现,忙了一下午,AC了还是很开心的,贴代码(c++风格) Posted by:POJLIU at 2020-01-29 18:16:14 > package poj.ProblemSet;
>
> import java.util.Scanner;
>
> public class poj1010 {
>
> public static final int MAXN = 100;
> public static int[] stamp_time = new int[MAXN];
> public static int[] stamp = new int[MAXN];
> public static int[] customer = new int[MAXN];
> public static int[] ans = new int[MAXN];
> public static int stamp_n, customer_n, flag;
> public static int ans_type, ans_total_time, ans_max_stamp;
> public static int now_type, now_total_time, now_max_stamp;
>
> public static void query() {
> now_type = now_total_time = now_max_stamp = 0;
> for (int i = 1; i <= stamp_n; i++) {
> if (stamp_time[i] > 0) {
> now_type++;
> now_total_time += stamp_time[i];
> if (stamp[i] > now_max_stamp)
> now_max_stamp = stamp[i];
> }
> }
> }
>
> public static void update(int type) {
> ans_type = type;
> ans_total_time = ans_max_stamp = 0;
> for (int i = 1; i <= stamp_n; i++) {
> ans[i] = stamp_time[i];
> if (ans[i] > 0) {
> ans_total_time += ans[i];
> if (stamp[i] > ans_max_stamp)
> ans_max_stamp = stamp[i];
> }
> }
> }
>
> public static void dfs(int cost, int type, int a, int num) {
> if (num > 4 || cost < 0) return;
> if (cost == 0) {
> if (type > ans_type) { flag = 0;update(type); }
> else if (type == ans_type) {
> query();
> if (now_total_time < ans_total_time) { flag = 0;update(type); }
> else if (now_total_time == ans_total_time) {
> if (now_max_stamp > ans_max_stamp) { flag = 0;update(type); }
> else if (now_max_stamp == ans_max_stamp) flag = 1;
> }
> }
>
> }
> for (int i = a; i <= stamp_n; i++) {
> if (i == a) {
> if (type == 0) { stamp_time[a]++;dfs(cost - stamp[a], 1, a, num + 1);stamp_time[a]--; }
> else { stamp_time[a]++;dfs(cost - stamp[a], type, a, num + 1);stamp_time[a]--; }
> }
> else { stamp_time[i]++;dfs(cost - stamp[i], type + 1, i, num + 1);stamp_time[i]--; }
> }
> }
>
> public static void main(String[] args) {
> Scanner cin = new Scanner(System.in);
> while (cin.hasNext()) {
> stamp_n = customer_n = 0;
> for (int i = 0; i < MAXN; i++) stamp_time[i] = stamp[i] = customer[i] = 0;
> do stamp[++stamp_n] = cin.nextInt(); while (stamp[stamp_n] != 0);
> do customer[++customer_n] = cin.nextInt(); while (customer[customer_n] != 0);
> stamp_n--;
> customer_n--;
> for (int i = 1; i <= stamp_n; i++)
> for (int j = i + 1; j <= stamp_n; j++)
> if (stamp[i] > stamp[j]) {
> int temp = stamp[i];
> stamp[i] = stamp[j];
> stamp[j] = temp;
> }
> for (int i = 1; i <= customer_n; i++) {
> ans_type = ans_total_time = ans_max_stamp = flag = 0;
> for (int j = 0; j < MAXN; j++) ans[j] = 0;
> dfs(customer[i], 0, 1, 0);
> if (flag == 1) System.out.println(customer[i] + " (" + ans_type + "): tie");
> else if (ans_type > 0) {
> System.out.print(customer[i] + " (" + ans_type + "):");
> for (int j = 1; j <= stamp_n; j++) if (ans[j] > 0) while (ans[j]-- > 0) System.out.print(" " + stamp[j]);
> System.out.println();
> }
> else System.out.println(customer[i] + " ---- none");
> }
> }
> }
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator