洛谷P2129 L國的戰鬥續之多路出擊

2022-03-01 06:43:19 字數 2204 閱讀 9953

這一次,l國決定軍隊分成n組,分布在各地,若以l國為原點,可以看作在乙個直角座標系內。但是他們都受統一的指揮,指令部共發出m個命令。命令有移動、上下轉移和左右轉移(瞬移??),但是由於某些奇奇怪怪的原因,軍隊收到命令總是有延遲,為了方便,軍方已經寫好乙個棧(那還要我幹嘛,自己都寫好不就行了?),所以你要處理的順序,應該是從後往前。

輸入格式:

輸入檔案army.in包括n+m+1行

第一行兩個整數n、m

接下來n行

第i行有兩個整數xi yi表示第i支軍隊的位置。

又是m行

每行首先是乙個字元 c

若c為m 則緊跟兩個整數 p q 表示把每支軍隊的位置從(xi,yi)移到(xi+p.yi+q)

若c為x 則表示把每支軍隊的位置從(xi,yi)移到(-xi,yi)

若c為y 則表示把每支軍隊的位置從(xi,yi)移到(xi,-yi)

輸出格式:

輸出檔案army.out包含n行

第i行有兩個整數xi、yi,表示第i支軍隊移動後的位置。

輸入樣例#1:

3 3

0 04 -3

6 7x

m -1 2

y

輸出樣例#1:

1 2

-3 5

-5 -5

對於30%的資料 1≤n≤1000 1≤m≤1000

對於100%的資料 1≤n≤500000 1≤m≤500000 ai在longint範圍內

#include#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int maxn=500000+5

;inline

intread()

while(ch>='

0'&&ch<='9')

return x*f;

}int

n,m;

struct

matp[maxn],ans;

inline mat matmul(mat a,mat b,

intlen)

return

res;

}int

main()

register

int x,y; char str[6

]; mat tmp;

for(register int i=1;i<=m;++i)

else

if(str[0]=='x'

)else

if(str[0]=='y'

) ans=matmul(ans,tmp,3

); }

for(register int i=1;i<=n;++i)

return0;

}

#include#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int maxn=500000+5

;inline

intread()

while(ch>='

0'&&ch<='9')

return x*f;

}int

n,m;

inta[maxn],b[maxn],p[maxn],q[maxn];

char str[maxn][6

];int

main()

register

int x=0,y=0,f1=1,f2=1

;

for(register int i=m;i>=1;--i)

else

if(str[i][0]=='x'

)else

if(str[i][0]=='y'

) }

for(register int i=1;i<=n;++i)

return0;

}

L國的戰鬥續之多路出擊

顯然,x和y可以分開維護。假設先維護x,我們可以發現操作是不具有結合律的,所以不能用乙個數字維護差值。所以我們就可以想到利用矩陣乘法去維護,因為矩陣乘法是具有結合律的。我們對操作維護乙個矩陣,答案矩陣為 x,1 去乘m個矩陣,然後因為是具有結合律,所以我們可以先把後面的m個矩陣算出來,然後再算x。a...

L國的戰鬥之間諜(洛谷)

題目背景 l國即將與i國發動戰爭!題目描述 俗話說的好 知己知彼,百戰不殆 l國的指揮官想派出間諜前往i國,於是,選人工作就落到了你身上。你現在有n個人選,每個人都有這樣一些資料 a 能得到多少資料 b 偽裝能力有多差 c 要多少工資 已知敵人的探查間諜能力為 m 即去的所有人b的和要小於等於m 和...

洛谷P1910 L國的戰鬥之間諜

l國即將與i國發動戰爭!俗話說的好 知己知彼,百戰不殆 l國的指揮官想派出間諜前往i國,於是,選人工作就落到了你身上。你現在有n個人選,每個人都有這樣一些資料 a 能得到多少資料 b 偽裝能力有多差 c 要多少工資 已知敵人的探查間諜能力為m 即去的所有人b的和要小於等於m 和手頭有x元錢,請問能拿...