NC214730. WoodCube
描述
输入描述
第一行为两个整数,分别表示发卡的个数和 Wood Cube 的距离限制。
接下来的 n 行,每行 6 个整数,第 i+1 行的第 j 个整数表示第 i 个发卡第 j 面所刻的数字。
输出描述
输出一个整数,表示 mio 最后选择的发卡中其中一个六个面的数字之和,如果无解,输出"0"。
示例1
输入:
6 3 1 2 3 4 5 6 1 3 4 5 7 10 1 3 4 5 7 10 1 3 4 5 10 11 10 10 11 12 13 12 11 12 100 18 20 10
输出:
30
示例2
输入:
5 3 10 11 123 11 80 6 1 2 3 4 5 6 10 11 123 11 80 6 2 3 4 6 1 3 8 0 1 2 3 4
输出:
241
示例3
输入:
5 1 1 2 3 4 5 6 10 11 12 13 14 15 1 2 3 4 5 6 10 11 12 13 14 15 3 4 5 19 12 31
输出:
0
C(clang11) 解法, 执行用时: 82ms, 内存消耗: 3044K, 提交时间: 2020-12-26 14:53:32
#include<stdio.h> #include<string.h> int a[100000][6]; int sum[100000]; int main(void) { int n,d,max=0; scanf("%d%d",&n,&d); int i,j,k,same; for(i=0; i<n; i++) for(j=0; j<6; j++) { scanf("%d",&a[i][j]); sum[i]+=a[i][j]; } for(i=0; i<n-2; i++) { if(sum[i]<=max) continue; for(j=i+1; j-i<=d&&j<n; j++) { same=0; if(sum[j]==sum[i]) { same=1; for(k=0; k<6; k++) if(a[i][k]!=a[j][k]) { same=0; break; } } if(same) { if(sum[i]>max) max=sum[i]; } } } printf("%d",max); return 0; }
C++(clang++11) 解法, 执行用时: 92ms, 内存消耗: 6188K, 提交时间: 2021-01-22 15:14:08
#include<bits/stdc++.h> using namespace std; unsigned long long t=0,base=1e9+7; unordered_map<unsigned long long,int>V; int main() { int i,j,k,x,n,d,ans=0; scanf("%d%d",&n,&d); for(i=1;i<=n;i++) { for(t=x=j=0;j<6;j++) scanf("%d",&k),t=t*base+k,x+=k; if(V[t]&&i-V[t]<=d) ans=max(ans,x); V[t]=i; } printf("%d",ans); return 0; }