第二屆“傳智杯”全國大學生IT技能大賽(決賽同步)
T130013 遊園會蓋章
題目描述
傳智專修學院舉辦了一場遊園活動,其中一個非常重要的環節就是收集印章。集章卡是一張高度寬度分別為 \(h,w(20\le h \le 1000,50\le w \le 2000)\) 的白紙。初始情況下每個單位畫素都是由 .
來填充(代表白色)。
現在小 A 在一個攤位上蓋章。由於小 A 很喜歡這個攤位印章的樣式,所以他會連續蓋上 \(n(1\le n \le 2000)\) 次印。這個印章是寬 50、高 20 的圖形,是這樣:
...........................,]]OOO@@@@OOO]`........ ....................,]OO@@@@@@@@@@@@@@@@@@@@O`.... ................./O@@@@@@@@@@@@@@@@@@@@@@@@@@@@^.. ............../O@@@@@@@@@@@@@@@OOOOOOO@@@@@@@@@@@. ..........,/@@@@@@@@@@@@O/[.............[O@@@@@@@\ ........,O@@@@@@@@@@O/`..................,O@@@@@@O .......O@@@@@@@@@O`......]OO@@@O\`........O@@@@@@@ .....,O@@@@@@@@/`.....]O@@@@@@@@@@^.......O@@@@@@@ ...,/@@@@@@@O/...../@@@@@@@@@@@@@@O....../@@@@@@@0 ..=@@@@@@@O`...../@@@@@@@@@@@@@@@@^.....O@@@@@@@O. ./@@@@@@@/......O@@@@@@@@@@@@@@@O`..../@@@@@@@@O.. =@@@@@@@O......O@@@@@@@@@@@@@@@^....O@@@@@@@@@O... O@@@@@@@^.....=@@@@@@@@@@@@@O[..../@@@@@@@@@O`.... @@@@@@@O.......\@@@@@@@@O[...../O@@@@@@@@@O`...... @@@@@@@@^.........[`.......]OO@@@@@@@@@@O`........ O@@@@@@@@O\............]/@@@@@@@@@@@@O/........... =@@@@@@@OOOoo`........O@@@@@@@@@@@@/`............. ..\OOOOO*,`*..........O@@@@@@@@@O`................ .....,[[..............O@@@@@@O`................... ......................O@@@@@@O....................
由於蓋章時手不太穩,所以蓋章時也有可能會使這個圖樣旋轉 180°(當然不同的字元只代表不同的顏色,字元本身不需要翻轉)。
現在已經知道了小 A 的 \(n\) 次蓋章資訊,包括左上角座標 \(x,y\),和旋轉方式 \(r\)。也就是說,這個圖樣旋轉後的左上角,位於集章卡的第 \(x\) 行 \(y\) 列的位置,集章卡的左上角座標是 \((0,0)\)。
需要特別注意的是,後蓋的印章可能和之前改的印章重疊。後蓋的章有顏色的部分(不是 .
的部分)會覆蓋之前印上的圖形。
輸入格式
第一行三個整數 \(n,h,w\) 代表印章次數,代表集章卡的高度和寬度。
接下來 \(n\) 行,每行三個整數
x,y,rx,y,r,描述每次蓋章的資訊。其中 (x,y)(x,y) 是圖樣(旋轉後)左上角的座標,r(0\le r\le 1)r(0≤r≤1) 代表旋轉方式,代表圖樣順時針旋轉 r\times 180\degreer×180° 。保證印章的圖案至少有一部分在集章卡內部。
輸出格式
輸出一個高度為 hh,寬度為 ww 的字元矩陣,表示全部蓋印後的集章卡的樣子。評測時會忽略行末空格和輸出檔案末尾的回車。
輸入輸出樣例
輸入 #1複製
2 37 70
2 2 0
15 18 1
輸出 #1複製
......................................................................
......................................................................
.............................,]]OOO@@@@OOO].......................... ......................,]OO@@@@@@@@@@@@@@@@@@@@O
.................../O@@@@@@@@@@@@@@@@@@@@@@@@@@@@^....................
................/O@@@@@@@@@@@@@@@OOOOOOO@@@@@@@@@@@...................
............,/@@@@@@@@@@@@O/[.............[O@@@@@@@..................
..........,O@@@@@@@@@@O/
..................,O@@@@@@O.................. .........O@@@@@@@@@O
......]OO@@@O`........O@@@@@@@.........................,O@@@@@@@@/
.....]O@@@@@@@@@@^.......O@@@@@@@.................. .....,/@@@@@@@O/...../@@@@@@@@@@@@@@O....../@@@@@@@0.................. ....=@@@@@@@O
...../@@@@@@@@@@@@@@@@^.....O@@@@@@@O....................../@@@@@@@/......O@@@@@@@@@@@@@@@O
..../@@@@@@@@O.................... ..=@@@@@@@O......O@@@@@@@@@@@@@@@^....O@@@@@@@@@O..................... ..O@@@@@@@^.....=@@@@@@@@@@@@@O[..../@@@@@@@@@O
........................@@@@@@@O.......@@@@@@@@O[...../O@@@O@@@@@@O........................
..@@@@@@@@^.........[
.......]OO@@@@@
O@@@@@@O..............[[,.........O@@@@@@@@O............]/@@@@@@@
O@@@@@@@@@O..........*
,OOOOO......=@@@@@@@OOOoo
........O@@@@@@
/@@@@@@@@@@@@O........ooOOO@@@@@@@=.. ....\OOOOO*,
..........O@@@@/O@@@@@@@@@@@@/]............\O@@@@@@@@O.........,[[..............O@
O@@@@@@@@@@OO].......
[.........^@@@@@@@@..........................
O@@@@@@@@@O/.....[O@@@@@@@@\.......O@@@@@@@.. ......................
O@@@@@@@@@/....[O@@@@@@@@@@@@@=.....^@@@@@@@O.......................O@@@@@@@@@O....^@@@@@@@@@@@@@@@O......O@@@@@@@=..
....................O@@@@@@@@/....
O@@@@@@@@@@@@@@@O....../@@@@@@@/... ...................O@@@@@@@O.....^@@@@@@@@@@@@@@@@/.....
O@@@@@@@=......................0@@@@@@@/......O@@@@@@@@@@@@@@/...../O@@@@@@@/,.....
..................@@@@@@@O.......^@@@@@@@@@@O].....
/@@@@@@@@O,....... ..................@@@@@@@O........
\O@@@OO]......O@@@@@@@@@O......... ..................O@@@@@@O,..................
/O@@@@@@@@@@O,............................@@@@@@@O[.............[/O@@@@@@@@@@@@/,............
...................@@@@@@@@@@@OOOOOOO@@@@@@@@@@@@@@@O/................
....................^@@@@@@@@@@@@@@@@@@@@@@@@@@@@O/...................
......................
O@@@@@@@@@@@@@@@@@@@@OO],...................... ..........................
]OOO@@@@OOO]],...................................................................................................
......................................................................
P6462 補刀
題目描述
UIM 在寫程式的空閒玩一款 MOBA 遊戲。
當敵方的小兵進入到我方防禦塔的範圍內,就會持續受到防禦塔造成的傷害;當然我方英雄也可以對它造成傷害。當小兵的血量降到了 0 或者更低,就會被擊殺。為了獲得經驗,UIM 希望在防禦塔將這個小兵殺死之前,親自補刀將其擊殺。
為了簡化問題,我們假設這個小兵有 \(h\) 點的生命值。每次防禦塔的攻擊可以給小兵造成 \(x\) 點傷害,而你的英雄每次攻擊可以給小兵造成 \(y\) 點傷害。你的攻擊速度和防禦塔攻擊速度相同,所以你可以在防禦塔第一次攻擊小兵之前,或者每次防禦塔攻擊之後,選擇是否對小兵進行一次攻擊,當然你也可以選擇不攻擊。
現在想知道,給出這些資訊,判斷英雄是否有辦法將這個小兵擊殺?
輸入格式
每個測試點由多組資料組成。
輸入第一行,包含一個正整數 \(T\),表示資料組數。
接下來 \(T\) 行,每行三個非負整數 \(h,x,y\),其意義已經在題目描述中給出。
輸出格式
輸出 \(T\) 行。對於每組資料,如果可以最後將小兵擊殺,輸出 Yes
,否則輸出 No
。
輸入
5
100 100 1
100 97 1
100 98 1
100 99 1
100 100 0
輸出
No
No
Yes
Yes
No
說明/提示
資料的組數不多於 \(50\),\(1\le h \le 10^{18}\),\(0\le x,y \le 10^{18}\)。
解題思路
模擬
程式碼
#include<bits/stdc++.h>
using namespace std;
using LL=long long;
int t;
LL h,x,y;
int main()
{
for(scanf("%d",&t);t;t--)
{
scanf("%lld%lld%lld",&h,&x,&y);
if(y==0)puts("No");
else if(x==0)
puts("Yes");
else
{
if(y>=h)puts("Yes");
else
{
LL a=(h+x-1)/x;
a--;
if(a<=0)puts("No");
else
{
h=h-a*x;
puts(h<=(a+1)*y?"Yes":"No");
}
}
}
}
return 0;
}