NC21312. 神秘餐馆
描述
输入描述
第一行输入3个整数n,m,budget (1 ≤ n ≤ 50, 1 ≤ m ≤ 50, 0 ≤ budget ≤ 10000)
接下来n行每行输入一个字符串,包含m个字符
第i行的第j个字符表示第i天第j道菜的价格
输出描述
输出一个整数
示例1
输入:
7 2 13 26 14 72 39 32 85 06
输出:
5
示例2
输入:
8 2 20 26 14 72 39 32 85 06 91
输出:
8
示例3
输入:
12 4 256 Dear Code rsHa veFu nInT heCh alle ngeP hase andb ecar eful
输出:
10
C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 608K, 提交时间: 2020-03-07 22:50:54
#include<stdio.h> #define fo(i,a,b) for(int i=a;i<=b;i++) int n,m,bg,p[60][60],d[8][14],dt[8],c[8][52],mi[8],sum; char s[60]; int main() { scanf("%d%d%d",&n,&m,&bg); fo(i,1,n) { scanf("%s",s+1); fo(j,1,m) { if('0'<=s[j]&&s[j]<='9') p[i][j]=s[j]-'0'; if('A'<=s[j]&&s[j]<='Z') p[i][j]=s[j]-'A'+10; if('a'<=s[j]&&s[j]<='z') p[i][j]=s[j]-'a'+36; } } fo(i,1,n) { d[i%7][++dt[i%7]]=i; fo(j,1,m) c[i%7][j]+=p[i][j]; sum-=mi[i%7]; mi[i%7]=c[i%7][1]; fo(j,2,m) if(c[i%7][j]<mi[i%7]) mi[i%7]=c[i%7][j]; sum+=mi[i%7]; if(sum>bg) { printf("%d\n",i-1); return 0; } } printf("%d\n",n); }
C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 380K, 提交时间: 2019-02-25 11:33:20
#include<stdio.h> #define fo(i,a,b) for(int i=a;i<=b;i++) int n,m,bg,p[60][60],d[8][14],dt[8],c[8][52],mi[8],sum; char s[60]; int main(){ scanf("%d%d%d",&n,&m,&bg); fo(i,1,n){ scanf("%s",s+1); fo(j,1,m){ if ('0'<=s[j]&&s[j]<='9') p[i][j]=s[j]-'0'; if ('A'<=s[j]&&s[j]<='Z') p[i][j]=s[j]-'A'+10; if ('a'<=s[j]&&s[j]<='z') p[i][j]=s[j]-'a'+36; } } fo(i,1,n){ d[i%7][++dt[i%7]]=i; fo(j,1,m) c[i%7][j]+=p[i][j]; sum-=mi[i%7]; mi[i%7]=c[i%7][1]; fo(j,2,m) if (c[i%7][j]<mi[i%7]) mi[i%7]=c[i%7][j]; sum+=mi[i%7]; if (sum>bg){ printf("%d\n",i-1); return 0; } } printf("%d\n",n); }