z 的值域未说明。(搞得我不知道是 int 还是 long long 甚至是高精度)
经试验,每个骑士只能砍下一个头。
代码(每个骑士能砍下多个头)
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e4 + 50;
int n,m;
long long a[maxn],b[maxn],ans = 0;
bool c[maxn];
int main(){
memset(c,false,sizeof(c));
scanf("%d%d",&n,&m);
for (int i = 1; i <= n; i++) scanf("%lld",&a[i]);
for (int i = 1; i <= m; i++) scanf("%lld",&b[i]);
sort(b + 1,b + m + 1);
for (int i = 1; i <= n; i++) {
int j = 1;
while (b[j] < a[i] && j <= m) j++;
if (j == m + 1) {
printf("you died!");
return 0;
}
else ans += b[j];
}
printf("%lld",ans);
return 0;
}
代码(每个骑士只能砍下一个头)
#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e4 + 50;
int n,m;
long long a[maxn],b[maxn],ans = 0;
bool c[maxn];
int main(){
memset(c,false,sizeof(c));
scanf("%d%d",&n,&m);
for (int i = 1; i <= n; i++) scanf("%lld",&a[i]);
for (int i = 1; i <= m; i++) scanf("%lld",&b[i]);
sort(b + 1,b + m + 1);
for (int i = 1; i <= n; i++) {
int j = 1;
while ((b[j] < a[i] || c[j] != false) && j <= m) j++;
if (j == m + 1) {
printf("you died!");
return 0;
}
else {
ans += b[j];
c[j] = true;
}
}
printf("%lld",ans);
return 0;
}
请求更正,谢谢