社区讨论

萌新20分,大佬帮忙看一哈

P1005[NOIP 2007 提高组] 矩阵取数游戏参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lo3f8hcb
此快照首次捕获于
2023/10/24 05:40
2 年前
此快照最后确认于
2023/10/24 05:40
2 年前
查看原帖
官方提供的,输入以下: 5 5 0 0 0 0 0 0 0 0 0 1 876 1 566 920 598 259 945 123 659 997 176 478 293 464 278
得到的正确答案为:118214
而我用自己的代码算出来的却是:116126 实在找不出那里错了(先排除用高精)
JAVA
import java.util.Arrays;
import java.util.Scanner;

public class P1005 {
	public static int n,m;
	public static int[][] arr;
	public static boolean[][] f;
	
	//返回列
	public static int fun(int i) {
		int min = 0;
		int l=0,r=m-1;
		while (true) {
			if (f[i][l]==false && f[i][r]==false) {
				break;
			}
			if (f[i][l]==true) {
				l++;
			}
			if (f[i][r]==true) {
				r--;
			}
		}
		return arr[i][l]<arr[i][r]?l:r;
	}
	
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		n = scan.nextInt();
		m = scan.nextInt();
		long sum = 0;
		arr = new int[n][m];
		f = new boolean[n][m];
		for (int i=0;i<n;i++) {
			for (int j=0;j<m;j++) {
				arr[i][j] = scan.nextInt();
			}
		}
		for (int j=1;j<=m;j++) {		//取的次数
			for (int i=0;i<n;i++) {		//第i行
				int k = fun(i);
				f[i][k] = true;
				sum += (long)arr[i][k]*(long)((int)Math.pow(2, j));
			}
		}
		System.out.println(sum);
	}
}

回复

3 条回复,欢迎继续交流。

正在加载回复...