求条
查看原帖
求条
1336385
NoSignal_CN楼主2024/10/12 09:49
#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
#define mp(x,y) make_pair(x,y)
#define pb(x) push_back(x)
#define size(s) ((int)s.size())
#define pf(x) push_front(x)
#define endl "\n"
using namespace std;
int inline solve();
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    #ifndef ONLINE_JUDGE
        freopen("input.txt","r",stdin);
        freopen("output.txt","w",stdout);
    #endif
    int t=1;//cin >> t;
    while(t--) solve();
    return 0;
}
/*----------------------------------------------------------------------------------------------------solution----------------------------------------------------------------------------------------------------*/
const int N=1e5+10,inf=4557430888798830399;
int n,q,dp[N],sum;
pair<pii,int> v[N];
pair<pii,pii > op[N];
string ans[N];
void inline update(int& res,int val){
    res=max(res,val);
}
int inline solve(){
    dp[0]=inf;
    cin >> n;
    for(int i=1;i<=n;i++){
        cin >> v[i].se >> v[i].fi.fi >> v[i].fi.se;
    }
    sort(v+1,v+1+n);
    cin >> q;
    for(int i=1;i<=q;i++){
        cin >> op[i].fi.fi >> op[i].se.fi >> op[i].fi.se;
        op[i].se.se=i;
        sum=max(sum,op[i].se.fi);
    }
    sort(op+1,op+1+q);
    for(int i=1,j=1;i<=q;i++){
        while(j<=n && v[j].fi.fi<=op[i].fi.fi){
            for(int k=sum;k>=v[j].se;k--){
                update(dp[k],min(dp[k-v[j].se],v[j].fi.se));
            }
            j++;
        }
        if(dp[op[i].se.fi]>op[i].fi.fi+op[i].fi.se){
            ans[op[i].se.se]="TAK";
        }else{
            ans[op[i].se.se]="NIE";
        }
    }
    for(int i=1;i<=n;i++){
        cout << ans[i] << endl;
    }
    return 0;
}

TLE+WA+ACTLE+WA+AC

2024/10/12 09:49
加载中...