2019中山大學程式設計競賽

2021-09-19 08:34:29 字數 1735 閱讀 7236

theme:給定n*m矩陣,有p個操作:將以(x1,y1),(x2,y2)為左上、右下的矩陣覆蓋。之後q次詢問:以(x1,y1),(x2,y2)為左上、右下的矩陣是否有全被覆蓋?

solution:二維字首和。先由一次字首和(差分)計算出每個格仔被覆蓋的次數之和。然後將不為0的值 置為1,再進行字首和就算出每個矩陣區域覆蓋總數,與矩陣大小比較即可。

#includeusing namespace std;

#define far(i,t,n) for(int i=t;i=0)

a[i*m+j]+=a[i*m+j-1];

if(i-1>=0)

a[i*m+j]+=a[(i-1)*m+j];

if(i-1>=0&&j-1>=0)

a[i*m+j]-=a[(i-1)*m+j-1];

}far(i,0,m*n)

//字首和,求區間矩陣被覆蓋總次數

far(i,0,n)

far(j,0,m)

int q;

scanf("%d",&q);

far(i,0,q)

}}/*

6 63

2 2 4 4

3 3 5 6

5 1 6 2

23 2 5 4

1 5 6 5

*/

theme:判斷n個數中可否存在構成三角形的三個數。1<=n<=5*10^6,數值在int範圍內

solution:對於n個數找構成三角形的三個數的題,按資料範圍有不同解法。想法是將這n個數從小到大排序,(下標從0開始),之後從i=1開始,將i,i+1作為三角形較大的兩邊,判斷它們的差(正值)d是否由上述思路轉化為兩邊之和大於第三邊的話,相鄰兩數a[i],a[i+1]之和要是=50時一定存在三個數(排序後)組成三角形。

#include #include #include#include using namespace std;

typedef long long ll;

int a[5000010];

ll fib[200];

int main()

if(n>=50)

sort(a,a+n);

int flag=0;

for(int i=1;itheme:由矩陣形式給定三檢視,一小格代表體積為1.問滿足該三檢視的圖形的最大體積為多少?

solution:題目輸入並不是直接按主檢視、左檢視、俯檢視角度給的,所以先確定一下x,y,z軸方向。想象乙個由x*y*z的格仔堆成的正方體。對於每一檢視,如主檢視,該格上有圖形,則表示它及它後面的格仔都可能放小正方體。這樣由三個檢視的&關係可以確定哪些格仔上是可以放小正方體的。

#include #include #include #include#include using namespace std;

typedef long long ll;

int front[110][110];

int left[110][110];

int top[110][110];

int ans[110][110][110];

int main()

}

2019中山大學程式設計競賽 Monitor

題目位址 題目大意 給你乙個n m的矩形,在這個矩形內告訴你p個矩形 左下角和右上角座標 問你q個問題,每次也是給你乙個矩形 左下角和右上角座標 問你每個矩形是否可以被開始給的p個矩形完全覆蓋。思路 n m範圍是1e7,無法開二維陣列,二維座標可以轉化為 n 1 m m,用一維陣列來記錄每個座標的字...

中山大學C 語言程式設計

cxsj01.csf cxsj02.csf cxsj03.csf cxsj04.csf cxsj05.csf cxsj06.csf cxsj07.csf cxsj08.csf cxsj09.csf cxsj10.csf cxsj11.csf cxsj12.csf cxsj13.csf cxsj14....

中山大學sicily第1813題

下面是我寫的1813題的 提交結果總是wrong answer,卻怎麼也找不錯來。請各位幫忙。中大sicily第1813題題目在http soj.me show problem.php?pid 1813 cid include include include using namespace std ...