답안 #1041546

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1041546 2024-08-02T05:30:19 Z vjudge1 Segway (COI19_segway) C++17
0 / 100
1 ms 1372 KB
#include<bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx")
using namespace std;
#define int long long 
const int N = 100001;
const int mod = 1e9+7;
const int mod1 = 998244353;

void solve(){
    int n;cin >>n;
    vector<vector<int>> v(n+1,vector<int>(3));
    for(int i = 1 ; i<=n; i++)
        cin >> v[i][0] >> v[i][1] >> v[i][2];
    int m;cin >> m;
    vector<int> acc(m+1);
    for(int i = 1;i<= m ;i ++){
        cin >> acc[i];
    }
    vector<vector<int>> time(n+1,vector<int>(301));
    vector<vector<int>> rem(n+1,vector<int>(301));
    int p = 1;
    for(int j = 1 ;j <=300 ;j ++){
        vector<int> o;
        for(int i = 1;i<=n ;i ++){
            int sp = v[i][(j-1)/100];
            // if(rem[i][j-1] > 1){
            //     time[i][j] = time[i][j-1] + 1;
            //     rem[i][j] = rem[i][j-1]-1;
            // }
            if(time[i][j]== 0)
                time[i][j] = time[i][j-1] + sp;
            else 
                time[i][j] = min(time[i][j],time[i][j-1] + sp);
            o.push_back(time[i][j]);
        }
        if(p<=m and acc[p] == j){
            sort(o.begin(),o.end());
            // for(int it:o)cout<<it<<" ";
            // cout<<endl;
            for(int i = 1;i<= n; i++){
                if(j+1<=300 and rem[i][j+1] > 0)continue;
                int t = upper_bound(o.begin(),o.end(),time[i][j-1])-o.begin();
                // cout<<t<<" "<<time[i][j-1]<<endl;
                // if(t>=o.size())t--;
                int p = (t)%20;
                for(int k = j+1 ;k <= min(300ll,j+p) ; k++){
                    // if(i == 3){
                    //     cout<<k<<"T";
                    // }
                    rem[i][k] = 1;
                    time[i][k] = time[i][k-1] + 1;
                }
                // cout<<endl;
            }
        }
        if(p<=m and acc[p] == j)p++;
    }
    // cout<<time[3][102]<<endl;
    for(int i = 1;i<= n;i ++){
        cout<<time[i][300]<<endl;
    }
}
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);cout.tie(NULL);
    
    int t=1;
    // cin>>t;
    cout<<setprecision(16);
    while(t--){
        solve();
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Incorrect 1 ms 1372 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 348 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Incorrect 1 ms 1372 KB Output isn't correct
3 Halted 0 ms 0 KB -