JZOJ 5572 塞克斯斯

2021-08-16 15:03:16 字數 1896 閱讀 3912

傳送門

考場上的思路

本來看第二個子任務是掃瞄線,結果座標範圍這麼小,打乙個字首和就好了。然後第乙個子任務看上去可以拆成四個格仔 o(

n2) o(n

2)打一維字首和,然後爆掉了……

正解有種東西叫做座標變換。(誤)

其實就是你逆時針旋轉 45∘45∘

後新建乙個座標系,發現乙個在原座標系裡的座標 (x

,y) (x,

y)會變成 (x

−y,x

+y) (x−

y,x+

y),然後你就在新的座標系裡跑一下二維字首和即可。最後查詢時將需要的座標對映到新座標系中去,看看有沒有斜的就好了。

參考**

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

typedef

long

long ll;

typedef

unsigned

long

long ull;

using

std::cin;

using

std::cout;

using

std::endl;

typedef

int int_put;

int_put readin()

while (std::isdigit(ch))

if (positive) a = -a;

return a;

}void printout(int_put x)

while (x /= 10);

dowhile (length);

}const

int maxn = 200005;

int n;

int p1 = true;

struct rect

} rects[maxn];

#define runinstance(x) delete new x

struct work

static

inline

int code2(int x)

static

inline

void change(int& x, int& y)

work() : sum1(), sum2()

else

}for (int i = 1; i < maxm; i++)

sum1[0][i] += sum1[0][i - 1];

for (int i = 1; i < maxm; i++)

for (int i = 1; i < maxm; i++)

int ans = 0;

for (int i = 1; i < maxm; i++)}}

printf("%.2f", (double)ans / 4);

}};void run()

runinstance(work);

}int main()

leetcode 557反轉字串

給定乙個字串,你需要反轉字串中每個單詞的字元順序,同時仍保留空格和單詞的初始順序。示例 1 輸入 let s take leetcode contest 輸出 s tel ekat edocteel tsetnoc 注意 在字串中,每個單詞由單個空格分隔,並且字串中不會有任何額外的空格。方法一 因為...

紫書 習題 10 12 UVa 557(概率計算)

開始的時候我沒有考慮1 2的概率,直接一波組合數,然後wa 後來去看題解發現我們可以反過來想,求最後兩個人不一樣的情況 這個時候肯定會拋到最後的 所以每一種可能就是 0.5 n 2 然後一共有c n 2,n 2 1 種 乘起來就ok了。但是這樣會超時而且結果太大 所以我們可以嘗試遞推 通過計算可以發...

557 反轉字串中的單詞 III

題目 給定乙個字串,你需要反轉字串中每個單詞的字元順序,同時仍保留空格和單詞的初始順序。示例 1 輸入 let s take leetcode contest 輸出 s tel ekat edocteel tsetnoc 思路 切分反轉合併 def reversewords self,s str s...