手机网站模板使用方法,威海网站优化推广,东莞专业做网站公司,平台公司组织架构题意#xff1a;
有n堆石头#xff0c;每堆石头最多只有三个石头#xff08;最少1个#xff09;#xff0c;每两堆石头#xff08;这两堆各含石头x个和y个#xff09;合一起的费用为(x mod 3) * (y mod 3)#xff0c;现在把所有堆合成一堆#xff0c;问最小费用 题目…题意
有n堆石头每堆石头最多只有三个石头最少1个每两堆石头这两堆各含石头x个和y个合一起的费用为(x mod 3) * (y mod 3)现在把所有堆合成一堆问最小费用 题目第一行给出三个数第i个数表示有i个石头的堆有多少个
题解
费用是(x mod 3) * (y mod 3)那也就是说如果x和y有一个是3的倍数那么费用就是0那么我们就要将堆内石头尽可能构造3的倍数 比如一个石头和两个石头合并费用是2 三个堆每个堆都只有一个石头费用是12 3 三个堆每个堆都只有两个石头费用是42 6 说明一个石头和两个石头构造更划算 那么我们一开始就让1个石头的堆和两个石头的合并然后多余的自己合并 详细看代码
代码
#includebits/stdc.h
typedef long long ll;
using namespace std;
inline int read(){int s0,w1;char chgetchar();while(ch0||ch9){if(ch-)w-1;chgetchar();}while(ch0ch9) ss*10ch-0,chgetchar();//s(s3)(s1)(ch^48);return s*w;
}
int main()
{ ll x,y,z;cinxyz;ll ans0;ansmin(x,y)*2;if(xy){x-y;//还剩下x堆只有一个石头的石头堆 ansx/3*3;//和成三个石头的堆if(x%31)ans0; if(x%32)ans1; }else if(yx){y-x;ansy/3*6;if(y%32)ans4;}coutans;
}