题意:
题目链接:https://ac.nowcoder.com/acm/contest/5673/K
分析:
思路应该是挺简单,比赛的时候一直 (WA),最后才知道爆了 (long long),我。。。
C++ 关于int128在何种环境下能够使用
代码:
#include <bits/stdc++.h>
using namespace std;
typedef __int128 ll;
typedef pair<ll,int>P;
const int N=1e5+5;
priority_queue<P>que;
int pos[N],b[N];
inline void print(__int128 x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9)
print(x/10);
putchar(x%10+'0');
}
int main()
{
int T,n,cas=0;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
while(!que.empty())
que.pop();
int a,ans1=0;
ll ans2=0,sum=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a);
sum+=a;
que.push(make_pair(sum,i));
}
for(int i=1;i<=n;i++)
{
scanf("%d",&b[i]);
if(i==1)
{
pos[i]=1;
continue;
}
if(b[i]<b[pos[i-1]]) pos[i]=i;
else pos[i]=pos[i-1];
}
int p=n+1,cnt=0;
while(!que.empty())
{
P now=que.top();
que.pop();
if(now.second>=p) continue;
p=pos[now.second];
ans2+=now.first*(b[p]-cnt);
cnt=b[p];
}
printf("Case #%d: %d ",++cas,b[1]);
print(ans2);
printf("
");
}
return 0;
}