Printer Queue 打印队列 UVA 12100
解题思路:我的做法是通过队列queue(保存队列)和vector容器(通过sort完成从小到大的排序)完成,只有遇到队列中优先级最高(数字最大)才能移除队列,时间加1(total++);而指定的元素位置仍用m标识,每一次移动m都向前挪动一个。当队列中元素移除一个时,最大元素就变了(通过v—来控制)
- #include
- #include
- #include
- #include
- using namespace std;
- queue
q; - vector
vec; - int main(){
- int T;
- scanf(“%d”,&T);
- while(T—){
- int n,m;
- scanf(“%d%d”,&n,&m);
- for(int i=0;i<n;i++)
- {
- int temp;
- scanf(“%d”,&temp);
- q.push(temp);
- vec.push_back(temp);
- }
- sort(vec.begin(),vec.end());
- int v=n-1; //vec[v]表示最大元素
- int total=0;
- while(true){
- int t=q.front();q.pop(); //取出一个元素并暂时删除
- if(m==0 && t>=vec[v]){
- total++;
- break;
- }
- else if(t>=vec[v]){ //当取出的值大于当前最大值时,移除,同时m—;
- total++;
- m=(m-1+v+1)%(v+1);
- v—;
- }
- else {
- q.push(t);
- m=(m-1+v+1)%(v+1);
- }
- }
- printf(“%d\n”,total);
- vec.clear();
- while(true)if(!q.empty())q.pop();else break; //最后别忘了清空容器
- }
- return 0;
- }
解题思路:我的做法是通过队列queue(保存队列)和vector容器(通过sort完成从小到大的排序)完成,只有遇到队列中优先级最高(数字最大)才能移除队列,时间加1(total++);而指定的元素位置仍用m标识,每一次移动m都向前挪动一个。当队列中元素移除一个时,最大元素就变了(通过v—来控制)
还没有评论,来说两句吧...