這一次,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 30 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元錢,請問能拿...