UVa11607 Cutting Cakes

UVa11607 Cutting Cakes

  • 題目鏈接
  • 題意
  • 分析
  • AC 代碼

題目鏈接

??UVa11607 Cutting Cakes

題意

??平面上有n(n≤1 500)個點,其中沒有3 點共線。另外有m(m≤700 000)條直線,你的任務是對于每條直線,輸出3 個數p, q, r,其中p 和q 為該直線兩側的點數(p≤q),r 是直線穿過的點數。

分析

??本題限時6s,還是比較寬松的,直接用分塊法能通過,比如把 n 個點集分成 8×88\times 88×8 塊。
??其次,可以構建四叉樹求解。先取 mid=n/2mid = n /2mid=n/2 處的點 p,根據其坐標得到劃分軸,再遍歷所有點 t 進行劃分,t 在坐標軸上則存到當前結點數據中,不在坐標軸上則按照其所在象限存入四棵子樹的數據中并遞歸構建子樹。此后只需要從根結點遞歸查詢:先求根結點數據的首個點與直線兩端點形成的三角形有向面積 s(s>0s > 0s>0 則 ++p;s=0s = 0s=0 則 ++r;s<0s < 0s<0 則 ++q),其它數據點也都求有向面積后進行 p、q、r 進行統計。然后可以利用首個點的有向面積 s 分類討論四個子結點的計數:s = 0 時,左上象限子結點內的數據全部統計給 p,右下象限子結點內的數據全部統計給 q,然后左下、右上兩個象限的子結點進行遞歸查詢;s > 0 時,左上象限子結點內的數據全部統計給 p,然后左下、右下、右上三個象限的子結點進行遞歸查詢;s < 0 時右下象限子結點內的數據全部統計給 q,然后左下、左上、右上三個象限的子結點進行遞歸查詢。

AC 代碼

#include <iostream>
#include <algorithm>
using namespace std;#define M 10000
#define N 1510
#define B 8
int x[N], y[N], u[N], v[N], x1, y1, x2, y2, dx1, dy1, dx2, dy2, vx, vy, a, b, m, n, p, r, kase = 0;int cross(int x1, int y1, int x2, int y2) {return x1*y2 - x2*y1;
}struct {int b[N], bx1, by1, bx2, by2, by4, c;void add(int i) {b[c++] = i;if (c == 1) bx1 = bx2 =x[i], by1 = by2 = y[i];else bx1 = min(bx1, x[i]), bx2 = max(bx2, x[i]), by1 = min(by1, y[i]), by2 = max(by2, y[i]);}void query() {int cc = cross(vx, vy, bx1 - x1, by1 - y1); bool e = cc < 0, f = cc == 0, g = cc > 0;cc = cross(vx, vy, bx2 - x1, by1 - y1); e = e || cc < 0; f = f || cc == 0; g = g || cc > 0;cc = cross(vx, vy, bx1 - x1, by2 - y1); e = e || cc < 0; f = f || cc == 0; g = g || cc > 0;cc = cross(vx, vy, bx2 - x1, by2 - y1); e = e || cc < 0; f = f || cc == 0; g = g || cc > 0;if (f || (e && g)) {for (int i=0; i<c; ++i) {cc = cross(vx, vy, x[b[i]]-x1, y[b[i]]-y1);if (cc > 0) ++p;else if (cc == 0) ++r;}} else if (g) p += c;}
} s[B][B];void query() {x1 = (x1 + dx1) % M; y1 = (y1 + dy1) % M; x2 = (x2 + dx2) % M; y2 = (y2 + dy2) % M;if (x1 == x2 && y1 == y2) y2 = (y1 + 1) % M;p = 0; r = 0; vx = x2 - x1; vy = y2 - y1;for (int i=0; i<B; ++i) for (int j=0; j<B; ++j) s[i][j].query();cout << min(p, n-r-p) << ' ' << max(p, n-r-p) << ' ' << r << endl;
}void solve() {cin >> n;for (int i=0; i<n; ++i) cin >> x[i] >> y[i], u[i] = x[i], v[i] = x[i];sort(u, u+n); sort(v, v+n); a = unique(u, u+n) - u; b = unique(v, v+n) - v;for (int i=0; i<B; ++i) for (int j=0; j<B; ++j) s[i][j].c = 0;for (int i=0, j=(a+B-1)/B, k=(b+B-1)/B; i<n; ++i)s[(lower_bound(u, u+a, x[i]) - u) / j][(lower_bound(v, v+b, y[i]) - v) / k].add(i);cout << "Case #" << ++kase << ':' << endl;cin >> m >> x1 >> y1 >> x2 >> y2 >> dx1 >> dy1 >> dx2 >> dy2;while (m--) query();
}int main() {ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int t; cin >> t;while (t--) solve();return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/97026.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/97026.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/97026.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[e3nn] 等變神經網絡 | 線性層o3.Linear | 非線性nn.Gate

第4章&#xff1a;等變神經網絡模塊 歡迎回來&#xff5e; 在我們探索e3nn的旅程中&#xff0c;我們已經揭示了一些基本概念&#xff1a; 在第1章&#xff1a;不可約表示&#xff08;Irreps&#xff09;中&#xff0c;我們學習了Irreps作為等變數據的標簽&#xff0c;告訴我們數…

共享云服務器替代傳統電腦做三維設計會卡頓嗎

與傳統本地工作站相比&#xff0c;云服務器在硬件配置、協作效率和成本控制方面具有明顯優勢&#xff0c;但設計師們比較關心的主要問題始終是&#xff1a;使用共享云服務器進行三維設計會出現卡頓嗎&#xff1f;這取決于硬件配置、網絡環境、軟件優化及使用場景等多方面因素。…

Autosar之CRC模塊概述

簡介 CRCL模塊提供如下的算法&#xff0c;用于對輸入數據進行循環冗余校驗&#xff0c;用于核對數據傳輸過程中是否被更改或者傳輸錯誤&#xff1a; CRC8: SAEJ1850 CRC8H2F: CRC8 0x2F polynomial CRC16: CCITT-FALSE CRC32: 0xF4ACFB13 CRC32P4: CRC32 0x1F4ACFB13 polynomia…

隱私計算框架PrivacyMagic(密算魔方)

隱私計算框架PrivacyMagic&#xff08;密算魔方&#xff09; 動機&#xff1a;寫論文時為了實現方案需要調用各種密碼學庫&#xff0c;寫起來有些混亂&#xff0c;失去了代碼結構的美感。最可氣的是現有的密碼學方案基本上是個寫個的&#xff0c;接口、類型并不通用&#xff0…

Linux--->網絡編程(TCP并發服務器構建:[ 多進程、多線程、select ])

TCP并發服務器構建一、服務器單循環服務器&#xff1a;服務端同一時刻只能處理一個客戶端的任務&#xff08;TCP&#xff09;并發服務器&#xff1a;服務端同一時刻可以處理多個客戶端的任務&#xff08;UDP&#xff09;二、TCP服務端并發模型1、多進程進程資源開銷大&#xff…

深入解析達夢數據庫:模式分類、狀態管理與實操指南

達夢數據庫&#xff08;DM Database&#xff09;作為國產數據庫的核心代表&#xff0c;其模式與狀態機制是保障數據高可用、實現主備同步的關鍵基礎。無論是日常運維中的數據庫配置&#xff0c;還是故障場景下的主備切換&#xff0c;都需要深入理解模式與狀態的特性及交互邏輯。…

如何選擇適合自己的PHP微服務框架?

在開始選擇之前&#xff0c;我們首先要明白&#xff1a;為什么需要微服務框架&#xff1f;傳統的單體應用&#xff08;Monolithic Application&#xff09;雖然開發簡單&#xff0c;但隨著業務復雜度的增加&#xff0c;會變得臃腫且難以維護。而微服務架構通過將應用拆分為一組…

ESP32使用場景及大規模物聯網IoT

最近用ESP32搭建了一個網絡,想知道搭建的網絡拓撲對不對。一、物聯網無線通信v.s通訊網絡無線通信我第一個好奇的問題就是&#xff0c;物聯網用ESP32的話&#xff0c;路由器用什么&#xff1f;物聯網也可以組WLAN&#xff0c;通訊網也可以組WLAN。把自己的Tenda AC1200路由器拆…

NSSCTF 4th WP

第一次打比賽AK了&#xff0c;雖然題比較簡單沒啥好說的&#xff0c;但還是想記錄一下 WEB ez_signin 源碼&#xff1a; from flask import Flask, request, render_template, jsonify from pymongo import MongoClient import reapp Flask(__name__)client MongoClient…

Paimon——官網閱讀:主鍵表

主鍵表(Table with PK)PK 是 Primary Key&#xff08;主鍵&#xff09;的縮寫。在數據庫中&#xff0c;主鍵是一個或多個列的組合&#xff0c;其值在表中是唯一的&#xff0c;并且不能為 NULL。主鍵的作用是確保每一行記錄的唯一性&#xff0c;便于數據的查找、管理和維護&…

【配置 PyCharm 連接遠程服務器進行開發和調試的完整流程】

前提條件&#xff1a; 1.PyCharm Professional&#xff08;社區版不支持遠程解釋器&#xff09; 2.代碼在本地目錄里面&#xff0c;可以同步上傳遠程服務器 3.宿主機上安裝了conda 環境 操作方法&#xff1a; 1、在本地使用PyCharm打開工程代碼&#xff1b; 2、然后Add New_in…

在壓力測試中如何確定合適的并發用戶數?

確定壓力測試中的合適并發用戶數 在進行壓力測試時&#xff0c;確定合適的并發用戶數是評估系統性能的關鍵步驟。并發用戶數是指同時向系統發送請求的用戶數量&#xff0c;它直接影響系統的負載水平和性能表現。以下是幾種常用的方法和考慮因素&#xff0c;用于確定合適的并發…

微算法科技(NASDAQ:MLGO)突破性FPGA仿真算法技術助力Grover搜索,顯著提升量子計算仿真效率

在量子計算迅猛發展的今天&#xff0c;量子算法尤其是在搜索和加密領域的應用&#xff0c;正逐步揭開了其顛覆性潛力。然而&#xff0c;量子計算機的實際實現仍是一項復雜且充滿挑戰的任務&#xff0c;因此&#xff0c;如何在經典計算平臺上高效建模和仿真量子算法成為了當前的…

TencentOS Server 4.4 下創建mysql容器無法正常運行的問題

環境 騰訊的 TencentOS Server 4.4 服務器系統 Linux app 6.6.92-34.1.tl4.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jun 25 14:33:47 CST 2025 x86_64 x86_64 x86_64 GNU/Linux docker使用的是yum安裝的版本 [rootapp ~]# docker version Client:Version: 28.0.1-202…

稀土:從“稀有”到“命脈”的科技核心

稀土&#xff0c;這個聽起來有些陌生的詞匯&#xff0c;其實早已悄然滲透進我們生活的方方面面。它并非真的“稀有”&#xff0c;而是指17種金屬元素的統稱&#xff0c;包括鑭、鈰、釹、銪等。這些元素在地殼中并不稀少&#xff0c;但因其獨特的物理和化學性質&#xff0c;使其…

開發手札:UnrealEngine編輯器開發

以前在unity框架中開發了非常多實用且高頻使用的編輯器工具&#xff0c;現在準備把目前用得上工具移植到ue4中。下面說明一下ue4開發編輯器工具的流程。1.創建編輯器工具控件2.在控件中創建一個Button和一個EditableText&#xff0c;用于測試3.新建一個繼承UEditorUtilityWidge…

EXCEL開發之路(一)公式解析—仙盟創夢IDE

Excel 數據校驗&#xff1a;基于自定義格式的深度解析與開發實現引言在數據處理和管理領域&#xff0c;Excel 是一款廣泛應用的工具。確保 Excel 中數據的準確性和完整性至關重要&#xff0c;而數據校驗是達成這一目標的關鍵手段。本文將借助特定的代碼示例&#xff0c;深入探討…

Day14——JavaScript 核心知識全解析:變量、類型與操作符深度探秘

接續上文&#xff1a;《前端小白進階 Day13&#xff1a;JavaScript 基礎語法 交互技巧 知識圖譜&#xff0c;零基礎也能懂》-CSDN博客 點關注不迷路喲。你的點贊、收藏&#xff0c;一鍵三連&#xff0c;是我持續更新的動力喲&#xff01;&#xff01;&#xff01; 主頁:一位…

anaconda本身有一個python環境(base),想用別的環境就是用anaconda命令行往anaconda里創建虛擬環境

差不多是這個意思&#xff0c;但需要稍微澄清一下&#xff1a;Anaconda 可以管理任意版本的 Python你安裝了 Anaconda 后&#xff0c;默認有一個 base 環境自帶的 Python。如果你想用其他版本&#xff0c;比如 Python 3.9、3.10&#xff0c;可以用 conda create -n py39 python…

畢業項目推薦:28-基于yolov8/yolov5/yolo11的電塔危險物品檢測識別系統(Python+卷積神經網絡)

文章目錄 項目介紹大全&#xff08;可點擊查看&#xff0c;不定時更新中&#xff09;概要一、整體資源介紹技術要點功能展示&#xff1a;功能1 支持單張圖片識別功能2 支持遍歷文件夾識別功能3 支持識別視頻文件功能4 支持攝像頭識別功能5 支持結果文件導出&#xff08;xls格式…