NC231677. 将idea煎至两面金黄
描述
输入描述
第一行一个正整数n,表示矩阵的大小 其中 n ≤ 522。
接下来n * 2行,每行n个以空格分割整数aij,表示矩阵的元素值,前n行和后n行分别表示2面矩阵,-2147483648 ≤ aij ≤ 2147483647
输出描述
如果可以做出,那么输出一个整数,即 最短的时间t 否则 输出 \n
示例1
输入:
2 2000 2019 2023 2023 2023 2023 2023 2023
输出:
2
说明:
示例2
输入:
1 2021 2022
输出:
0
说明:
已经是2022啦pypy3 解法, 执行用时: 425ms, 内存消耗: 30180K, 提交时间: 2021-12-31 22:24:00
def iint(): ans=[] sc=input().split() for i in range(0,len(sc)): ans.append(int(sc[i])) return ans def ilist(): return list(input()) n=iint()[0] ans=1000000000000000000 for i in range(0,n*2): a=iint() for j in range(0,n): g=2022-a[j] if g<0: g+=4294967296 g*=2 l=0 r=g while l<r: m=(l+r)>>1 if m*(m+1)>=g: r=m else: l=m+1 ans=min(ans,r) print(ans)
C++ 解法, 执行用时: 64ms, 内存消耗: 396K, 提交时间: 2022-01-03 15:18:26
#include<bits/stdc++.h> using namespace std; int n;long long MIN; int main(){ scanf("%d",&n);MIN=1e18; for(int i=1;i<=2*n;i++) for(int j=1;j<=n;j++){ long long num;scanf("%lld",&num); if(num<=2022ll) MIN=min(MIN,2022ll-num); else MIN=min(MIN,2147483648ll+2022ll+(2147483647ll-num)); } for(int i=0;;i++){ MIN-=i; if(MIN<=0){printf("%d\n",i);break;} } return 0; }