不谈超时,只有部分能AC, 请大佬帮我看一看算法有没有漏洞,求求了。
#include<bits/stdc++.h>
using namespace std;
int get_max_at(double,int);//获取上界
int push();
int remove();
int main(){
int got_num;
cin >> got_num;
int max_t = 0;
double store_a[got_num];
int store_t[got_num];
for(int i=0;i<got_num;i++){
double a;
int t;
cin >> a >> t;
store_a[i] = a;
store_t[i] = t;
if(t >= max_t){
max_t = t;
}
}
int a[max_t*5000];
for(int i = 0;i<=max_t;i++){
a[i] = -1;
}
for(int i = 0;i<got_num;i++){
int now_num = 0;
for(int j = 1;j<=store_t[i];j++){
int q = get_max_at(store_a[i],j);
//cout<< q << " ";
for (int k = 0;k<max_t*5000;k++){
//cout << q << a[k] << " ";
int boo = 0;
for (int z = k;z<max_t;z++){
if (a[z] == q){
a[z] = -1;
boo = 1;
}
}
if (boo == 1){
break;
}
if(a[k] !=-1 && a[k] != q){
continue;
}
a[k] = q;
break;
}
}
}
for(int k = 0;k<max_t;k++){
//cout << a[k] << " ";
if (a[k] != -1){
int b = 0;
cout << a[k];
break;
}
}
return 0;
}
int get_max_at(double a,int t){
//计算整数部分上限
int zmax = floor(a)*t;
//计算小数部分上限
int fmax = ((a*1000000 - floor(a)*1000000)*t)/1000000;
return zmax + fmax;
}