NC19330. 水果蛋糕
描述
输入描述
一行两个正整数n,m
输出描述
一行一个整数表示答案
示例1
输入:
1 4
输出:
4
示例2
输入:
3 4
输出:
10
C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 488K, 提交时间: 2018-10-15 08:25:18
#include<bits/stdc++.h> using namespace std; int main() { int n,m; scanf("%d%d",&n,&m); if(n<3||m<3){printf("%lld\n",1ll*n*m);return 0;} if(n>m)swap(n,m); if(n==4&&m==4){puts("12");return 0;} if(n==4&&m==5){puts("17");return 0;} if(n==4) { int t=m/6,r=m%6; long long ans=2ll*m; if(r==1||r==2)ans+=2*r; else if(r==3||r==4)ans+=4; else if(r==5)ans=12ll*(t+1); printf("%lld\n",ans); return 0; } if(n==3) { int t=m/6,r=min(3,m%6); long long ans=m+6ll*t+2ll*r; printf("%lld\n",ans); return 0; } cout<<(1ll*n*m+1)/2<<endl; return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 504K, 提交时间: 2020-03-28 20:46:43
#include<iostream> #define ll long long using namespace std; int main() { ll n,m; cin>>n>>m; if(n<m) swap(n,m); if(m<=2) cout<<n*m<<endl; else if(m==3) cout<<n+n/6*6+2*min(n%6,3ll)<<endl; else if(m==4) { ll v=n%6; if(v==0) cout<<2*n<<endl; else if(v==1||v==2) cout<<2*n+2*v<<endl; else cout<<2*n+4-(v==5?2:0)<<endl; } else cout<<((n*m+1)>>1)<<endl; return 0; }