社区讨论

呃呃呃,#7#8RE?

P1083[NOIP 2012 提高组] 借教室参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@lo1932wi
此快照首次捕获于
2023/10/22 17:12
2 年前
此快照最后确认于
2023/11/02 17:02
2 年前
查看原帖
大佬们帮我看看吧。还有一件事真的很奇怪,我下载第七个数据,只能下载出来一个80000 10 后面的数据没有了,数据被损坏了?
CPP
//
//  main.cpp
//  借教室
//
//  Created by 汪汪队 on 2023/9/30.
//

#include <algorithm>
#include <array>
#include <bitset>
#include <cassert>
#include <climits>
#include <cstdint>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <memory>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <stack>
#include <string>
#include <unordered_set>
#include <unordered_map>
#include <vector>
#define int long long
#define double long double
#define ve vector<int>
#define dq deque<int>
#define vep vector<pair<int,int>>
#define vepush emplace_back
#define map map<int,int>
#define umap unordered_map<int,int>
#define uset unordered_set<int,int>
#define show(p) for(auto t: p) cout<<t<<" "; cout<<endl;
#define endl "\n"
#define all(a) a.begin(), a.end()
#define inf 0x3f3f3f3f
#define INF 0xffffffff
#define mod 1000000007
#define MOD 998244353
#define lowbit(x) x&(-x)
#define WHILE_LOOP1
//#define WHILE_LOOP2
//#define FIND_WRONG
//#pragma GCC optimize ("O3")
//auto sum = [](auto x, auto y) { return x + y; };
using namespace std;

void solve();
bool bool_solve();
bool ansf=0;

signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    int T; T=1;

    #ifdef WHILE_LOOP1
        while (T--) solve();
    #elif defined(WHILE_LOOP2)
        while (T--) {
            if (bool_solve())
                cout << "YES\n";
            else
                cout << "NO\n";
        }
    #endif

    return 0;
}
 
void solve(){
    int n,m; cin>>n>>m;
    ve p(n+1,0);
    for (int i=1; i<=n; i++) {
        cin>>p[i];
    }
    ve cf(n+2,0);
    for (int i=1; i<=n+1; i++) {
        cf[i]=p[i]-p[i-1];
    }
    struct Data{int d,x,y;};
    vector<Data>data;
    for (int i=1; i<=m; i++) {
        int _d,_x,_y; cin>>_d>>_x>>_y;
        data.push_back({_d,_x,_y});
    }
    auto check = [](int n,int mid,ve q,vector<Data>&data) {
        for (int i=1; i<=mid; i++) {
            q[data[i-1].x]-=data[i-1].d;
            q[data[i-1].y+1]+=data[i-1].d;
        }
        for (int i=1; i<=n; i++) {
            q[i]+=q[i-1];
            if(q[i]<0){ ansf=1; return 0;}
        }
        return 1;
    };
    int l=1; int r=n;
    while (l<r) {
        int mid=(l+r)/2;
        if(check(n,mid,cf,data)){
            l=mid+1;
        }
        else r=mid;
    }
    if(!check(n,l,cf,data)){
        cout<<-1<<endl<<l<<endl; return;
    }
    if(!ansf){
        cout<<0<<endl; return;
    }
    else{
        cout<<-1<<endl<<l<<endl; return;
    }
    return;
}

bool bool_solve(){
    
    return 1;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...