D. Hexagons(最小向量分解)

it2025-09-29  5

#include<bits/stdc++.h> #define ll long long using namespace std; int c[10]; int main(){ int T;cin>>T; while(T--){ int x,y;cin>>x>>y; for(int i=1;i<=6;i++) cin>>c[i]; ll ans=0; c[1]=min(c[1],c[6]+c[2]); c[2]=min(c[2],c[1]+c[3]); c[3]=min(c[3],c[2]+c[4]); c[4]=min(c[4],c[3]+c[5]); c[5]=min(c[5],c[4]+c[6]); c[6]=min(c[6],c[5]+c[1]); c[1]=min(c[1],c[6]+c[2]); c[2]=min(c[2],c[1]+c[3]); c[3]=min(c[3],c[2]+c[4]); c[4]=min(c[4],c[3]+c[5]); c[5]=min(c[5],c[4]+c[6]); c[6]=min(c[6],c[5]+c[1]); if(x>=0&&y>=0){ if(x>=y){ ans=ans+1ll*y*c[1]+1ll*(x-y)*c[6]; } else ans=ans+1ll*x*c[1]+1ll*(y-x)*c[2]; } else if(x>=0&&y<=0){ ans=ans+1ll*x*c[6]+1ll*(-y)*c[5]; } else if(x<=0&&y>=0){ ans=ans+1ll*(-x)*c[3]+1ll*y*c[2]; } else{ x=-x;y=-y; if(x>=y){ ans=ans+1ll*y*c[4]+1ll*(x-y)*c[3]; } else ans=ans+1ll*x*c[4]+1ll*(y-x)*c[5]; } printf("%lld\n",ans); } return 0; }

 

最新回复(0)