답안 #785646

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
785646 2023-07-17T11:13:56 Z canadavid1 Pyramid Base (IOI08_pyramid_base) C++14
35 / 100
5000 ms 24236 KB
#include <bits/stdc++.h>
using namespace std;
#define all(x) begin(x),end(x)
#define rep(i,e) for(int i = 0; i < e; i++)
struct rect
{
    int sx,sy,ex,ey;
};
struct obstacle 
{
    rect p;
    int c;
};
vector<obstacle> ob;
int Xs,Ys,B,P;
bool intersects(rect a, rect b)
{
    // check intersection of each of the lines
    if(a.sx > b.ex || b.sx > a.ex) return false;
    if(a.sy > b.ey || b.sy > a.ey) return false;
    return true;
}
bool valid_position(rect pos)
{
    // for now just check every obstacle
    if (pos.ey > Ys || pos.ex > Xs) return false;
    int c = 0;
    for(auto &i : ob)
    {
        if(intersects(pos,i.p)) c += i.c;
        if(c > B) return false;
    }
    return true;
}
int main()
{
    cin >> Xs >> Ys >> B >> P;
    ob.resize(P);
    for(auto &&i : ob)
    {
        cin >> i.p.sx >> i.p.sy >> i.p.ex >> i.p.ey >> i.c;
    }
    vector<int> sx={1};
    for(auto &i : ob) sx.push_back(i.p.ex+1);
    vector<int> sy={1};
    for(auto &i : ob) sy.push_back(i.p.ey+1);
    int tops = 0;

    for(auto tsy : sy)
    {
        for(auto tsx : sx)
        {
            // binary search over sizes. but try tops first
            if(!valid_position({tsx,tsy,tsx+tops,tsy+tops})) continue;
            int l = tops;
            int r = min(Xs-tsx,Ys-tsy);
            while(r-l > 1)
            {
                int m = (r+l)/2;
                if(valid_position({tsx,tsy,tsx+m,tsy+m})) l = m;
                else r = m;
            }
            tops = l+1;
        }
    }
    cout << tops << "\n";
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 27 ms 324 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 46 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 85 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 344 KB Output is correct
2 Correct 45 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 146 ms 340 KB Output is correct
2 Correct 6 ms 356 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 88 ms 468 KB Output is correct
2 Correct 4796 ms 572 KB Output is correct
3 Execution timed out 5049 ms 468 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5056 ms 1108 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5019 ms 1460 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5054 ms 1780 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5041 ms 2028 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5036 ms 12252 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5045 ms 19008 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5060 ms 24236 KB Time limit exceeded
2 Halted 0 ms 0 KB -