Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define gc c=getchar()
- #define r(x) read(x)
- #define getchar() (frS==frT&&(frT=(frS=frBB)+fread(frBB,1,1<<12,stdin),frS==frT)?EOF:*frS++)
- using namespace std;
- char frBB[1<<12],*frS=frBB,*frT=frBB;
- inline void read(int& x){
- x=0;char gc;
- while(!isdigit(c))gc;
- while(isdigit(c)){x=x*10+c-'0';gc;}
- }
- const int N=1e5+7;
- int ord[6][N];
- int a[N][6];
- int b[N][6];
- int f[N];
- int v[N];
- int p[6];
- int vis[N];
- int Now;
- inline bool cmp(const int &x,const int &y){
- return a[x][Now]<a[y][Now];
- }
- int main(){
- // freopen(".in","r",stdin);
- // freopen(".out","w",stdout);
- int T;r(T);
- while(T--){
- int n,k;r(n),r(k);
- for(int i=1;i<=k;++i)r(f[i]);
- for(int i=1;i<=n;++i){
- for(int j=1;j<=k;++j)r(a[i][j]);
- for(int j=1;j<=k;++j)r(b[i][j]);
- }
- for(int i=1;i<=k;++i){
- for(int j=1;j<=n;++j)ord[i][j]=j;
- Now=i;sort(ord[i]+1,ord[i]+n+1,cmp);
- }
- for(int i=1;i<=n;++i)vis[i]=0;
- for(int i=1;i<=k;++i)p[i]=1,v[i]=0;
- int sum=0;
- while(1){
- int cnt=0;
- for(int i=1;i<=k;++i){
- v[i]+=f[i];
- f[i]=0;
- }
- for(int i=1;i<=k;++i){
- while(p[i]<=n&&a[ord[i][p[i]]][i]<=v[i]){
- if(++vis[ord[i][p[i]]]==k){
- cnt++;
- for(int j=1;j<=k;++j)f[j]+=b[ord[i][p[i]]][j];
- }
- p[i]++;
- }
- }
- if(cnt)sum+=cnt;
- else break;
- }
- printf("%d\n",sum);
- for(int i=1;i<k;++i)printf("%d ",v[i]);
- printf("%d\n",v[k]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement