1. 程式人生 > 其它 >第二屆“傳智杯”全國大學生IT技能大賽(決賽同步)

第二屆“傳智杯”全國大學生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;
}