我需要计算一个时间间隔,其中我的数据按以下方式排列: 我在A列中有事件开始的日期,在B列中有事件的小时:分钟。对于C,带有事件结束日期;对于D,带有小时:分钟结束事件。 我想以分钟为单位计算开始和结束之间的差异。开始日期可以是不同的日期和月份,所以我不能只减去时间。
答案 0 :(得分:2)
答案 1 :(得分:1)
在Excel中,整数是天,小数点是一天中的时间。
考虑到这一点:
import java.util.* ;
import java.io.BufferedReader ;
import java.io.InputStreamReader ;
public class MaximumSumTorus
{
public static void main(String args[]) throws Exception
{
BufferedReader bro = new BufferedReader(new InputStreamReader(System.in)) ;
int T = Integer.parseInt(bro.readLine().trim()) ;
for(int t=0;t<T;t++)
{
int N = Integer.parseInt(bro.readLine().trim()) ;
int[][] A = new int[N][N] ;
for(int i=0;i<N;i++)
{
String[] S = bro.readLine().split(" +") ;
for(int j=0;j<N;j++)
{
A[i][j] = Integer.parseInt(S[j]) ;
}
}
System.out.println(solve(A)) ;
}
}
static int solve(int[][] M)
{
int[][] M2 = doubleMatrix(M) ;
toRangeMatrix(M2) ;
return(maxInMatrix(M2)) ;
}
static int[][] doubleMatrix(int[][] M)
{
int[][] M2 = new int[2*M.length][2*M.length] ;
for(int i=0;i<M.length;i++)
{
for(int j=0;j<M[0].length;j++)
{
M2[i][j] = M[i][j] ;
M2[i+M.length][j] = M[i][j] ;
M2[i][j+M.length] = M[i][j] ;
M2[i+M.length][j+M.length] = M[i][j] ;
}
}
return M2 ;
}
static void toRangeMatrix(int[][] M)
{
for(int i=0;i<M.length;i++)
{
for(int j=0;j<M[0].length;j++)
{
if(i>0) M[i][j]+=M[i-1][j] ;
if(j>0) M[i][j]+=M[i][j-1] ;
if(i>0 && j>0) M[i][j]-=M[i-1][j-1] ;
}
}
}
static int maxInMatrix(int[][] M)
{
int maxInMatrix = Integer.MIN_VALUE ;
for(int i=0;i<M.length/2;i++)
{
for(int j=0;j<M.length/2;j++)
{
for(int k=i;k-i<M.length/2;k++)
{
for(int l=j;l-j<M.length/2;l++)
{
int subRect = M[k][l] ;
if(i>0) subRect -= M[i-1][l] ;
if(j>0) subRect -= M[k][j-1] ;
if(i>0 && j>0) subRect+=M[i-1][j-1] ;
maxInMatrix = Math.max(subRect,maxInMatrix) ;
}
}
}
}
return maxInMatrix ;
}
}
然后,您需要设置单元格的格式以适合您的需求。
编辑:仅作说明,您可以将格式设置为“自定义”,并使用=(C1+D1)-(A1+B1)
来汇总分钟。