直覺 用大根堆堆 用STL的priority_que 實現的; 過了七組數據,還有13組數據未過
#include <bits/stdc++.h>
using namespace std;
const int MM=100000;
int n,m,q,u,v,t;
//那隻蚯蚓 m:時間 q:增加的長度 p=u/v
int qiuyin[MM];
vector<int> qiuyin2;
priority_queue<int> que;
int main(){
cin >> n >> m >> q >>u >> v>>t;
for(int i=0;i<n;i++){
cin >> qiuyin[i];
}
for(int i=0;i<n;i++){
que.push( qiuyin[i] );
}
for(int i=1;i<=m;i++){
int large = 0;
if(!que.empty()) {
large = que.top();
que.pop();
if( i>=t && i%t==0) cout << large << " ";
}
qiuyin2.clear();
while(!que.empty()){
qiuyin2.push_back(que.top());
//cout<< "debug :"<<que.top() << " "<<endl;
que.pop();
}
for(int j=0;j<qiuyin2.size();j++){
qiuyin2[j] += q;
que.push( qiuyin2[j] );
}
//double p= 1.0*u/v;
//cout <<"debug p" << p<<endl;
int new1= int( 1.0*large*u/v);
int new2= large- new1;
//cout<<"debug: new1 new2"<< new1 <<" "<< new2<<" "<<endl;
que.push(new1);
que.push(new2);
}
cout << endl;
int ge=0;
while(!que.empty()){
int temp=que.top(); que.pop();
ge++;
if( ge>=t && ge%t==0) cout << temp << " ";
}
return 0;
}
收到網上“”記錄時間戳“的思路的啓發”,將所有的蚯蚓長度都折算到0時刻的長度(可能有負值)
通過了了16組數據,還有4組數據未通過。
#include <bits/stdc++.h>
using namespace std;
const int MM=100000;
int n,m,q,u,v,t;
//那隻蚯蚓 m:時間 q:增加的長度 p=u/v
int qiuyin[MM];
priority_queue<int> que; //記錄0時刻的蚯蚓的長度
int main(){
cin >> n >> m >> q >>u >> v>>t;
for(int i=0;i<n;i++){
cin >> qiuyin[i];
}
for(int i=0;i<n;i++){
que.push( qiuyin[i] );
}
for(int i=1;i<=m;i++){
int large = que.top() + (i-1)*q;
que.pop();
if( i>=t && i%t==0) cout << large << " ";
int new1= int( 1.0*large*u/v);
int new2= large- new1;
// cout<<"debug: new1 new2"<< new1 <<" "<< new2<<" "<<endl;
que.push(new1 - i*q);
que.push(new2 - i*q);
}
cout << endl;
int ge=0;
while(!que.empty()){
int ans=que.top() + m * q;
que.pop();
ge++;
if( ge>=t && ge%t==0 && ans>=0 ) cout << ans<< " ";
}
return 0;
}