Sequence Poj

来源:互联网 发布:httpclient js 编辑:程序博客网 时间:2024/06/05 17:09

从网上找来了代码,自己又加了优化(先将每次读入的行排序),才结束了漫长的TLE,代码如下:


#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include <queue>#include <map>#include <string>#include <cctype>using namespace std;const int maxn=100010;int a[2010];int m,n;int main(){    int t;    int b,c,flag;    scanf("%d",&t);    while(t--){        priority_queue<int,vector<int>, greater<int> > minheap;        priority_queue<int,vector<int> ,less<int> > maxheap;        scanf("%d %d",&m,&n);        for(int i=0;i<n;i++){            scanf("%d",&b);            minheap.push(b);        }        for(int i=1;i<m;i++){            for(int j=0;j<n;j++){                scanf("%d",&a[j]);            }            sort(a,a+n);            while(!minheap.empty()){                b=minheap.top();                minheap.pop();                if(!maxheap.empty() && (b+a[0])>=maxheap.top()) continue;                for(int j=0;j<n;j++){                    if(maxheap.size()<n){                        maxheap.push(b+a[j]);                    }                    else if(maxheap.size()==n && maxheap.top()>(b+a[j])){                        maxheap.pop();                        maxheap.push(b+a[j]);                    }                    else if(b+a[j]>=maxheap.top()) break;                }            }                        while(!maxheap.empty()){                minheap.push(maxheap.top());                maxheap.pop();            }        }        for(int i=0;i<n;i++){            printf("%d ",minheap.top());            minheap.pop();        }        printf("\n");    }//end for while-t}


原创粉丝点击