Advertisement
yicongli

HDU6393

Mar 12th, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.38 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define gc c=getchar()
  6. #define r(x) read(x)
  7. #define getchar() (frS==frT&&(frT=(frS=frBB)+fread(frBB,1,1<<12,stdin),frS==frT)?EOF:*frS++)
  8. using namespace std;
  9. char frBB[1<<12],*frS=frBB,*frT=frBB;
  10.  
  11. inline void read(int& x){
  12.     x=0;char gc;
  13.     while(!isdigit(c))gc;
  14.     while(isdigit(c)){x=x*10+c-'0';gc;}
  15. }
  16.  
  17. const int N=1e5+7;
  18.  
  19. int ord[6][N];
  20. int a[N][6];
  21. int b[N][6];
  22. int f[N];
  23. int v[N];
  24. int p[6];
  25.  
  26. int vis[N];
  27. int Now;
  28. inline bool cmp(const int &x,const int &y){
  29.     return a[x][Now]<a[y][Now];
  30. }
  31.  
  32. int main(){
  33. //  freopen(".in","r",stdin);
  34. //  freopen(".out","w",stdout);
  35.     int T;r(T);
  36.     while(T--){
  37.         int n,k;r(n),r(k);
  38.         for(int i=1;i<=k;++i)r(f[i]);
  39.         for(int i=1;i<=n;++i){
  40.             for(int j=1;j<=k;++j)r(a[i][j]);
  41.             for(int j=1;j<=k;++j)r(b[i][j]);
  42.         }
  43.         for(int i=1;i<=k;++i){
  44.             for(int j=1;j<=n;++j)ord[i][j]=j;
  45.             Now=i;sort(ord[i]+1,ord[i]+n+1,cmp);
  46.         }
  47.         for(int i=1;i<=n;++i)vis[i]=0;
  48.         for(int i=1;i<=k;++i)p[i]=1,v[i]=0;
  49.         int sum=0;
  50.         while(1){
  51.             int cnt=0;
  52.             for(int i=1;i<=k;++i){
  53.                 v[i]+=f[i];
  54.                 f[i]=0;
  55.             }
  56.             for(int i=1;i<=k;++i){
  57.                 while(p[i]<=n&&a[ord[i][p[i]]][i]<=v[i]){
  58.                     if(++vis[ord[i][p[i]]]==k){
  59.                         cnt++;
  60.                         for(int j=1;j<=k;++j)f[j]+=b[ord[i][p[i]]][j];
  61.                     }
  62.                     p[i]++;
  63.                 }
  64.             }
  65.             if(cnt)sum+=cnt;
  66.             else break;
  67.         }
  68.         printf("%d\n",sum);
  69.         for(int i=1;i<k;++i)printf("%d ",v[i]);
  70.         printf("%d\n",v[k]);
  71.     }
  72.     return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement