Sort by

recency

|

937 Discussions

|

  • + 0 comments

    Here is my c++ solution , you can watch the explanation here : https://youtu.be/3L-haDbsjAg

    int workbook(int n, int k, vector<int> arr) {
        int page = 1, chapter = 1, fe = 1, res = 0;
        while(chapter <= arr.size()){
            int le = min(fe + k - 1, arr[chapter-1]);
            if(fe <= page && page <= le) res++;
            fe = le + 1;
            if(fe > arr[chapter-1]) {
                chapter++;
                fe = 1;
            }
            page ++;
        }   
        return res;
    }
    
  • + 0 comments
    def workbook(n, k, arr):
        book=[]
        ans=0
        for i in range(n):
            for h in range(arr[i]//k):
                book.append(list(range(h*k+1,h*k+k+1)))
            if arr[i]%k!=0:
                book.append(list(range((arr[i]//k)*k+1,arr[i]+1)))
        print(book)
        for d in range(len(book)):
            if d+1 in book[d]:
                ans+=1
        return ans
    
  • + 0 comments
    book = []
    page = -1
    ans = 0
    
    for i in range(n):
        for j in range(arr[i]):
            if j % k == 0:
                page += 1
                book.append([])
            book[page].append(j+1)
            if page == j:
                ans += 1
    return ans
    
  • + 0 comments

    Instead of iterating over each problem, we can check if current_page falls within the range of problem_number to last_problem_on_page.

    This approach reduces the time complexity for each page from O(k) to O(1) , where k is the maximum number of problems per page. Because it performs a single comparison per page rather than multiple comparisons for each problem on the page.

    def work_book(n, k, arr):
        special_problems = 0
        current_page = 1
    
        for chapter in range(n):
            total_problems = arr[chapter]
            problem_number = 1
    
            while problem_number <= total_problems:
                # Calculate the last problem on the current page
                last_problem_on_page = min(problem_number + k - 1, total_problems)
    
                # Check if the current page contains a special problem
                if problem_number <= current_page <= last_problem_on_page:
                    special_problems += 1
    
                # Move to the next page and update the problem number
                current_page += 1
                problem_number = last_problem_on_page + 1
    
        return special_problems
    
  • + 0 comments

    Haskell

    module Main where
    
    import Data.List.Split (chunksOf)
    
    solve :: Int -> [Int] -> Int
    solve k arr =
        length -- count the True
            . filter id -- only the Trues
            . zipWith elem [1 ..] -- is the page number in the page?
            $ concatMap (chunksOf k . flip take [1 ..]) arr -- list of pages' contents
    
    main :: IO ()
    main = do
        [n, k] <- map read . words <$> getLine :: IO [Int]
        arr <- map read . words <$> getLine :: IO [Int]
        print $ solve k arr