wa3求调
查看原帖
wa3求调
1122530
elpsconr楼主2024/10/27 20:05

写了发后缀min,有个问题这个数据是怎么只用159成本的?我模拟一遍也是177啊,求解

1
16 21
8135 3435 4761 3746 6105 682 2186 4767 2036 6419 3372 9882 6676 2084 868 6186
9928 7700 1451 157 53 31 21 20 13 12 11 10 9 8 7 6 5 4 3 2 1

顺带代码

/*
   卫风·芄兰
芄兰之支,童子佩觿.
虽则佩觿,能不我知?
容兮遂兮,垂带悸兮.
芄兰之叶,童子佩韘.
虽则佩韘,能不我甲?
容兮遂兮,垂带悸兮.
*/
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define PII pair<int,int>
#define tul tuple<int,int,int>
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define rep_(i,a,b) for(int i=a;i>=b;--i)
#define all(x) x.begin(),x.end()
#define bp(x) __builtin_popcountll(x)
#define cy cout<<"YES"<<endl
#define cn cout<<"NO"<<endl
#define lc (rt<<1)
#define rc (rt<<1|1)
mt19937_64 rnd(time(0));
const int N=3e5+5,yyx=1e9+7;
vector<PII> to[N];
int n,m,k;
int a[N],b[N],f[N];
inline int mod(int x){
  return (x%yyx+yyx)%yyx;
}
inline int cmin(int &x,int y){
  return x>y?x=y,1:0;
}
inline int cmax(int &x,int y){
  return x<y?x=y,1:0;
}
inline void solve(){
  cin>>n>>m;
  rep(i,1,n) cin>>a[i],f[i]=0;
  rep(i,1,m) cin>>b[i];
  rep(i,1,n){
    rep_(j,m,1){
      if(b[j]>=a[i]){
        f[i]=j;break;
      }
    }
  }
  rep(i,1,n){
    if(!f[i]){
      cout<<-1<<endl;return;
    }
  }
  rep_(i,n-1,1) f[i]=min(f[i],f[i+1]);
  rep(i,1,n) cout<<f[i]<<" \n"[i==n];
  int res=0,ans=0;
  rep(i,1,n){
    if(f[i]==f[i+1]){
      res+=a[i];
      if(res>b[f[i]]){
        res=a[i];
        ans+=m-f[i];
      }
    }
    else{
      if(res<=b[f[i]]){
        ans+=m-f[i];
      }
      res+=a[i];
      if(res>b[f[i]]){
        ans+=(m-f[i]);
      }
      res=0;
    }
  }
  cout<<ans<<endl;
}
signed main(){
  cin.tie(0)->sync_with_stdio(0);
  //freopen("D://321//in.txt","r",stdin);
  //freopen("D://321//out.txt","w",stdout);
  int _=1;
  cin>>_;
  while(_--)
  solve();
  return 0;
}
2024/10/27 20:05
加载中...