สมมติว่าเรามีอาร์เรย์คู่ P โดย P[i] เป็น (l, r) และตัวเลข k พิจารณาว่าอ่านหนังสือ n บท แต่ละหน้าอยู่ในบทเดียว แต่ละบทมีอย่างน้อย 1 หน้า อ่านบางหน้า และทำเครื่องหมายหน้า k เป็นหน้าแรกที่ยังไม่ได้อ่าน ต้องหาจำนวนบทที่ยังอ่านไม่จบ P[i] คือช่วงหน้าของบท
เช่น ถ้าอินพุตคือ P = [[1, 3], [4, 7], [8, 11]]; k = 4 เอาต์พุตจะเป็น 2 เพราะอ่านบทแรกจบ อีก 2 บทยังอ่านไม่จบ
ขั้นตอนการแก้ปัญหา
n := ขนาดของ P
for i := 1 ถึง n:
if k >= P[i-1, 0] และ k <= P[i-1, 1]:
return n - i + 1
return 0
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
int solve(vector<vector<int>> P, int k) {
int n = P.size();
for (int i = 1; i <= n; i++) {
if (k >= P[i - 1][0] && k <= P[i - 1][1])
return n - i + 1;
}
return 0;
}
int main() {
vector<vector<int>> P = { { 1, 3 }, { 4, 7 }, { 8, 11 } };
int k = 4;
cout << solve(P, k) << endl;
}
อินพุต
{ { 1, 3 }, { 4, 7 }, { 8, 11 } }, 4
เอาต์พุต
2