제출 #1116877

#제출 시각아이디문제언어결과실행 시간메모리
1116877dostsCloud Computing (CEOI18_clo)C++17
0 / 100
1 ms348 KiB
//Dost SEFEROĞLU #include <bits/stdc++.h> #pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt") using namespace std; #define int long long #define pii pair<int,int> #define ff first #define ss second #define sp << " " << #define all(cont) cont.begin(),cont.end() #define vi vector<int> int MOD = 1e9+7,inf = 2e18; const int N = 1e3+50,Q = 2e5+50; int add(int x,int y) { return ((x+y) >= MOD ? x+y-MOD : x+y); } int mult(int x,int y) { return ((x%MOD)*(y%MOD))%MOD; } int expo(int x,int y) { if (!y) return 1; int e = expo(x,y/2); e = mult(e,e); if (y&1) e = mult(e,x); return e; } int divide(int x,int y) { return mult(x,expo(y,MOD-2)); } struct Order { int c,f,v; }; struct Computer { int c,f,v; }; void solve() { //dp[i][j] --> ilk i bilgisayarda j güç aldıysam ilk i bilgisayara izin verenlerden max profit //dp[i][j] --> dp[i+1][j] (+(i+1.bilgisayarı ilgilendirenlerden profit toplamı)) //dp[i][j] --> dp[i+1][j+p[i+1]] (+(i+1.bilgisayarı ilgilendirenlerden profit toplamı) - v[i]) //n * n * c --> two pointers int n; cin >> n; vector<Computer> computers(n+1); for (int i=1;i<=n;i++) cin >> computers[i].c >> computers[i].f >> computers[i].v; sort(computers.begin()+1,computers.end(),[&](const Computer& c1,const Computer& c2) { return c1.f > c2.f; }); int m; cin >> m; vector<Order> order(m+1); for (int i=1;i<=m;i++) cin >> order[i].c >> order[i].f >> order[i].v; sort(order.begin()+1,order.end(),[&](const Order& o1,const Order& o2) { return o1.f > o2.f; }); vector<Order> bucket[n+1]; int ptr = 0; for (int i=1;i<=m;i++) { while (ptr<n && computers[ptr+1].f >= order[i].f) ptr++; bucket[ptr].push_back(order[i]); } int dp[n+1][50*n+1]; for (int i=0;i<=n;i++) { for (int j = 0;j<=50*n;j++) dp[i][j] = -inf; } dp[0][0] = 0; for (int i=0;i<n;i++) { int ptr = 0; int ptr2 = 0; int profittaken = 0; int profittaken2 = 0; for (int c = 0;c <= 50*n;c++) { if (dp[i][c] == -inf) continue; //almicam while (ptr < bucket[i+1].size() && bucket[i+1][ptr].c <= c) { profittaken += bucket[i+1][ptr].v; ptr++; } //alcam while (ptr2 < bucket[i+1].size() && bucket[i+1][ptr2].c <= c+computers[i+1].c) { profittaken2 += bucket[i+1][ptr2].v; ptr2++; } dp[i+1][c] = max(dp[i+1][c],dp[i][c]+profittaken); if (c+computers[i+1].c <= 50*n) { dp[i+1][c+computers[i+1].c] = max(dp[i+1][c+computers[i+1].c],dp[i][c]-computers[i+1].v+profittaken2); } } } int ans = 0; for (int i=0;i<=50*n;i++) ans = max(ans,dp[n][i]); cout << ans << '\n'; } int32_t main() { ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #ifdef Dodi freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int t = 1; //cin >> t; while (t --> 0) solve(); }

컴파일 시 표준 에러 (stderr) 메시지

clo.cpp: In function 'void solve()':
clo.cpp:81:24: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<Order>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   81 |             while (ptr < bucket[i+1].size() && bucket[i+1][ptr].c <= c) {
      |                    ~~~~^~~~~~~~~~~~~~~~~~~~
clo.cpp:86:25: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<Order>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   86 |             while (ptr2 < bucket[i+1].size() && bucket[i+1][ptr2].c <= c+computers[i+1].c) {
      |                    ~~~~~^~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...