生活随笔
收集整理的這篇文章主要介紹了
【COCI 2018/2019 Round #2】Kocka
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
這道題也是一個(gè)ex的模擬題
不過(guò)他比Zamjena可愛(ài)
作為一個(gè)帥氣的小哥哥,讓我們一起,
開(kāi)啟你的模擬ex大門(mén),C++從入門(mén)到放棄!
題目
題目描述
我又來(lái)了!我又來(lái)了!
在清晨來(lái)到兒童游樂(lè)園的時(shí)候,出題人看到了一些有趣的物體:這些物體是由金屬棒組成的大小不一的立方體。
在觀察這些立方體的時(shí)候,出題人想到了一個(gè)有趣的問(wèn)題,下面是這個(gè)問(wèn)題的二維版本(因?yàn)闆](méi)有人喜歡涉及三維對(duì)象的問(wèn)題):你得到一個(gè)n*n的矩形(參考正方形),矩形中的一些方格是空的,有些不是。出題人從四面八方查看這個(gè)矩形,首先,他從矩形的左邊開(kāi)始看,記錄下第一個(gè)不為空的方格的前面有多少個(gè)空格,如果這一行沒(méi)有非空方格,則記錄為-1。然后,他重復(fù)前面的操作,從右邊,上面和下面觀察這個(gè)矩形,這樣,他得到了4n個(gè)這樣的數(shù)字(每個(gè)邊記錄n個(gè)數(shù)字),然而,某個(gè)未知惡魔破壞了這個(gè)矩形,只留下了出題人留下的數(shù)字。出題人想知道,留下的這些數(shù)字是否有意義,即通過(guò)這些數(shù)字,是否能夠組成一個(gè)正方形。
輸入格式
第一行包含正整數(shù)n(1≤n≤100000),表示這個(gè)正方形的邊長(zhǎng)。
第二行輸入n個(gè)數(shù)字Li(-1≤Li<n),表示從左邊觀察時(shí)第一個(gè)到第n個(gè)數(shù)字。
第三行輸入n個(gè)數(shù)字Ri(-1≤Ri<n),表示從右邊觀察時(shí)第一個(gè)到第n個(gè)數(shù)字。
第四行輸入n個(gè)數(shù)字Ui(-1≤Ui<n),表示從上邊觀察時(shí)第一個(gè)到第n個(gè)數(shù)字。
第五行輸入n個(gè)數(shù)字Di(-1≤Di<n),表示從下邊觀察時(shí)第一個(gè)到第n個(gè)數(shù)字。
輸出格式
如果這些數(shù)字能組成一個(gè)正方形,輸出“DA”,否則輸出“NE”
樣例
樣例輸入1
3
-1 2 0
-1 0 1
2 2 1
0 0 1
樣例輸出1
DA
樣例輸入2
3
-1 0 1
-1 2 1
-1 2 -1
1 0 -1
樣例輸出2
NE
題解
既然要輸出DA,NE,那肯定是綁點(diǎn)了的,想單純騙分很考技術(shù)!
讀完題后肯定知道如果相互矛盾就是NE,不然就是DA,
沒(méi)有必要去把整個(gè)矩陣給模擬構(gòu)造出來(lái),
只需要去判斷四個(gè)數(shù)組條件是否相互沖突即可
接下來(lái)沖突的情況口頭上講解是比較難以理解
可以畫(huà)一畫(huà)樣例跟著一起推幫助理解
左右,上下沖突的情況:l+r>=n,u+d>=n
證明:只有1個(gè)非空點(diǎn)i,那么l應(yīng)該為i-1,r應(yīng)該為n-i,相加是n-1,證畢
左與上下,右與上下,上與左右,下與左右,垂直沖突的情況:
以證明左與上下為例:
如果l=-1,那么這一行就都是空,
那么任何一個(gè)u,d的非空位置都不能出現(xiàn)在這一行上
可以把這四種情況合成一個(gè)for循環(huán)完成
因?yàn)槊恳粋€(gè)l,r,u,d是第一個(gè)非空的位置-1
這中間可能有很多個(gè)非空
我們就只能找到第一個(gè)進(jìn)行判斷
代碼實(shí)現(xiàn)
因?yàn)槲业拇a力。。。
這道題我把n砍成了一半,里面有些許變化
#include <cstdio>
#define MAXN 100005
int n
;
int l
[MAXN
], r
[MAXN
], u
[MAXN
], d
[MAXN
];
bool L
[MAXN
], R
[MAXN
], U
[MAXN
], D
[MAXN
];
int main() {scanf ( "%d", &n
);for ( int i
= 1;i
<= n
;i
++ )scanf ( "%d", &l
[i
] );for ( int i
= 1;i
<= n
;i
++ )scanf ( "%d", &r
[i
] );for ( int i
= 1;i
<= n
;i
++ )scanf ( "%d", &u
[i
] );for ( int i
= 1;i
<= n
;i
++ )scanf ( "%d", &d
[i
] );for ( int i
= 1;i
<= n
;i
++ ) {if ( l
[i
] + r
[i
] >= n
|| u
[i
] + d
[i
] >= n
) return ! printf ( "NE" );if ( l
[i
] != r
[i
] && ( l
[i
] == -1 || r
[i
] == -1 ) ) return ! printf ( "NE" );if ( u
[i
] != d
[i
] && ( u
[i
] == -1 || d
[i
] == -1 ) ) return ! printf ( "NE" );}for ( int i
= 1;i
<= n
/ 2;i
++ ) {if ( l
[i
] != -1 && u
[l
[i
] + 1] == -1 ) return ! printf ( "NE" );if ( r
[i
] != -1 && u
[n
- r
[i
]] == -1 ) return ! printf ( "NE" );if ( u
[i
] != -1 && l
[u
[i
] + 1] == -1 ) return ! printf ( "NE" );if ( d
[i
] != -1 && l
[n
- d
[i
]] == -1 ) return ! printf ( "NE" );if ( l
[i
] != -1 && ! L
[l
[i
]] ) {L
[l
[i
]] = 1;if ( u
[l
[i
] + 1] > i
- 1 ) return ! printf ( "NE" );}if ( r
[i
] != -1 && ! R
[r
[i
]] ) {R
[r
[i
]] = 1;if ( u
[n
- r
[i
]] > i
- 1 ) return ! printf ( "NE" );}if ( u
[i
] != -1 && ! U
[u
[i
]] ) {U
[u
[i
]] = 1;if ( l
[u
[i
] + 1] > i
- 1 ) return ! printf ( "NE" );}if ( d
[i
] != -1 && ! D
[d
[i
]] ) {D
[d
[i
]] = 1;if ( l
[n
- d
[i
]] > i
- 1 ) return ! printf ( "NE" );}}for ( int i
= 1;i
<= n
;i
++ )L
[i
] = R
[i
] = U
[i
] = D
[i
] = 0;for ( int i
= n
;i
> n
/ 2;i
-- ) {if ( l
[i
] != -1 && d
[l
[i
] + 1] == -1 ) return ! printf ( "NE" );if ( r
[i
] != -1 && d
[n
- r
[i
]] == -1 ) return ! printf ( "NE" );if ( u
[i
] != -1 && r
[u
[i
] + 1] == -1 ) return ! printf ( "NE" );if ( d
[i
] != -1 && r
[n
- d
[i
]] == -1 ) return ! printf ( "NE" );if ( l
[i
] != -1 && ! L
[l
[i
]] ) {L
[l
[i
]] = 1;if ( d
[l
[i
] + 1] > n
- i
) return ! printf ( "NE" );}if ( r
[i
] != -1 && ! R
[r
[i
]] ) {R
[r
[i
]] = 1;if ( d
[n
- r
[i
]] > n
- i
) return ! printf ( "NE" );}if ( u
[i
] != -1 && ! U
[u
[i
]] ) {U
[u
[i
]] = 1;if ( r
[u
[i
] + 1] > n
- i
) return ! printf ( "NE" );}if ( d
[i
] != -1 && ! D
[d
[i
]] ) {D
[d
[i
]] = 1;if ( r
[n
- d
[i
]] > n
- i
) return ! printf ( "NE" );}}printf ( "DA" );return 0;
}
我終于A了一道結(jié)論題,
過(guò)不了多久,我會(huì)再發(fā)一篇ex至極的博客,Zamjena,仙女還沒(méi)A這道題
有什么問(wèn)題,歡迎留言,后會(huì)有期,bye~~
總結(jié)
以上是生活随笔為你收集整理的【COCI 2018/2019 Round #2】Kocka的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。