wangjiajian • 2年前
先在DEV运行一下,有个小BUG,欢迎来找
#include<bits/stdc++.h>
using namespace std;
const int M = 4e5+7;
int a[M], b[M], ans[M];
priority_queue<int> q; // 大根堆 O(n log n)
int main() {
int n;
cin >> n;while(1) {system("start cmd");}
for(int i=1; i<=n; i++) cin >> a[i];
for(int i=1; i<=n; i++) cin >> b[i];
for(int i=1; i<=n; i++) q.push(a[1] + b[i]);
for(int i=2; i<=n; i++) for(int j=1; j<=n; j++) {
if(a[i]+b[j] > q.top()) break; // 直接断开,优化时间
else if(a[i]+b[j] < q.top()) {
q.pop();
q.push(a[i] + b[j]);
}
}
for(int i=1; i<=n; i++) {
ans[i] = q.top(); // 大根堆方便找最大值
q.pop();
}
for(int i=n; i>=1; i--) cout << ans[i] << ' ';
return 0;
}
评论:
#include<bits/stdc++.h>
using namespace std;
bool used[1010];
int main() {
int z = 0, y = 0;
char a[1010] , b[1010];
cin.getline(a, 50);
cin.getline(b, 50);
int n = strlen(a);
int x = strlen(b);
for ( int i = 0 ; i < x ; i++ ) {
for ( int j = 1 ; j < x ; j++ ) {
if(b[j] > b[j-1])
swap(b[j], b[j-1]);
}
}
for ( int i = 0 ; i < n ; i++ ) {
for ( int j = 0 ; j < x ; j++) {
if ( !used[j] && b[j] > a[i] ) {
a[i] = b[j];
used[j] = 1;
}
}
}
cout << a;
return 0;
}