[luoguP2129] L国的战斗续之多路出击(模拟 || 矩阵)

传送门

1.模拟

easy

#include <cstdio>
#define N 500001

int n, m;
int X[N], Y[N], x[N], y[N], a = 1, b = 1, p, q;
char s[N][1];

int main()
{
    int i;
    scanf("%d %d", &n, &m);
    for(i = 1; i <= n; i++) scanf("%d %d", &X[i], &Y[i]);
    for(i = 1; i <= m; i++)
    {
        scanf("%s", s[i]);
        if(s[i][0] == ‘m‘) scanf("%d %d", &x[i], &y[i]);
    }
    for(i = m; i >= 1; i--)
        if(s[i][0] == ‘m‘)
        {
            p += x[i];
            q += y[i];
        }
        else if(s[i][0] == ‘x‘)
        {
            a *= -1;
            p *= -1;
        }
        else
        {
            b *= -1;
            q *= -1;
        }
    for(i = 1; i <= n; i++) printf("%d %d\n", X[i] * a + p, Y[i] * b + q);
    return 0;
}

 

2.矩阵优化

详见 Matrix67

#include <cstdio>
#include <cstring>
#define N 500001

int n, m;
int X[N], Y[N], x[N], y[N];
char s[N][2];

struct Matrix
{
	int n, m;
	int a[11][11];
	Matrix()
	{
		n = m = 0;
		memset(a, 0, sizeof(a));
	}
}sum;

inline Matrix operator * (const Matrix x, const Matrix y)
{
	Matrix ret;
	ret.n = x.n;
	ret.m = y.m;
	int i, j, k;
	for(i = 1; i <= x.n; i++)
		for(j = 1; j <= y.m; j++)
			for(k = 1; k <= y.n; k++)
				ret.a[i][j] += x.a[i][k] * y.a[k][j];
	return ret;
}

int main()
{
	int i;
	Matrix t;
	scanf("%d %d", &n, &m);
	sum.n = sum.m = 3;
	sum.a[1][1] = sum.a[2][2] = sum.a[3][3] = 1;
	for(i = 1; i <= n; i++) scanf("%d %d", &X[i], &Y[i]);
	for(i = 1; i <= m; i++)
	{
		scanf("%s", s[i]);
		if(s[i][0] == ‘m‘) scanf("%d %d", &x[i], &y[i]);
	}
	for(i = m; i >= 1; i--)
	{
		memset(t.a, 0, sizeof(t.a));
		t.n = t.m = 3;
		t.a[1][1] = t.a[2][2] = t.a[3][3] = 1;
		if(s[i][0] == ‘m‘) t.a[1][3] = x[i], t.a[2][3] = y[i];
		if(s[i][0] == ‘x‘) t.a[1][1] = -1;
		if(s[i][0] == ‘y‘) t.a[2][2] = -1;
		sum = t * sum;
	}
	for(i = 1; i <= n; i++)
	{
		memset(t.a, 0, sizeof(t.a));
		t.n = 3;
		t.m = t.a[3][1] = 1;
		t.a[1][1] = X[i];
		t.a[2][1] = Y[i];
		t = sum * t;
		printf("%d %d\n", t.a[1][1], t.a[2][1]);
	}
	return 0;
}

  

时间: 2024-07-31 19:41:49

[luoguP2129] L国的战斗续之多路出击(模拟 || 矩阵)的相关文章

洛谷 P2129 L国的战斗续之多路出击(模拟)

P2129 L国的战斗续之多路出击 题目背景 广而告之:背景见其他L国的战斗!!大家一起刷 题目描述 这一次,L国决定军队分成n组,分布在各地,若以L国为原点,可以看作在一个直角坐标系内.但是他们都受统一的指挥,指令部共发出m个命令.命令有移动.上下转移和左右转移(瞬移??),但是由于某些奇奇怪怪的原因,军队收到命令总是有延迟,为了方便,军方已经写好一个栈(那还要我干嘛,自己都写好不就行了?),所以你要处理的顺序,应该是从后往前. 输入输出格式 输入格式: 输入文件army.in包括n+m+1行

P2129 L国的战斗续之多路出击

倒搜模拟,矩阵乘法,结束 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=500005,INF=2000000000; 4 int X[maxn],Y[maxn],a[maxn],b[maxn]; 5 char cmd[maxn]; 6 int n,M,p=0,q=0,curx=1,cury=1; 7 char c; 8 int main() { 9 cin>>n>>M; 10 for(

洛谷——P1910 L国的战斗之间谍

https://www.luogu.org/problem/show?pid=1910#sub 题目背景 L国即将与I国发动战争!! 题目描述 俗话说的好:“知己知彼,百战不殆”.L国的指挥官想派出间谍前往I国,于是,选人工作就落到了你身上. 你现在有N个人选,每个人都有这样一些数据:A(能得到多少资料).B(伪装能力有多差).C(要多少工资).已知敌人的探查间谍能力为M(即去的所有人B的和要小于等于M)和手头有X元钱,请问能拿到多少资料? 输入输出格式 输入格式: N M X A1 B1 C1

洛谷 P1910 L国的战斗之间谍(水题日常)

题目背景 L国即将与I国发动战争!! 题目描述 俗话说的好:“知己知彼,百战不殆”.L国的指挥官想派出间谍前往I国,于是,选人工作就落到了你身上. 你现在有N个人选,每个人都有这样一些数据:A(能得到多少资料).B(伪装能力有多差).C(要多少工资).已知敌人的探查间谍能力为M(即去的所有人B的和要小于等于M)和手头有X元钱,请问能拿到多少资料? 输入输出格式 输入格式: N M X A1 B1 C1 A2 B2 C2 ……………… AN BN CN 输出格式: 能得到的资料总数 输入输出样例

洛谷 P1913 L国的战斗之伞兵

P1913 L国的战斗之伞兵 题目背景 L国即将与I国发动战争!! 题目描述 为了在敌国渗透作战,指挥官决定:派出伞兵前往敌国!然而敌国的风十分强烈,能让伞兵在同一高度不停转悠,直到被刮到一个无风区……(可怜的小兵) 输入输出格式 输入格式: 第一行:n.m两个正整数,表示敌国的大小. 以下n行,每行m个字符,“u”表示风向北吹:“d”表示风向南吹:“l”表示风向西吹:“r”表示风向东吹:“o”表示无风.(上北下南,左西右东) 输出格式: 一个数:表示有几个点可以放下伞兵. 输入输出样例 输入样

8-31测试总结

一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选 择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块岩石(不含起点和终 点的岩石).在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达 终点. 为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳 跃距离尽可能长.由于预算限制,组委会至多从起点和终点之间移走 M 块岩石(不能 移走起点和终点的岩石). 输入 输入文件第一行包含三个整数 L,N

[NOIP2015] 提高组 洛谷P2680 运输计划

题目背景 公元 2044 年,人类进入了宇宙纪元. 题目描述 L 国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道连通了 L 国的所有星球. 小 P 掌管一家物流公司,该公司有很多个运输计划,每个运输计划形如:有一艘物 流飞船需要从 ui 号星球沿最快的宇航路径飞行到 vi 号星球去.显然,飞船驶过一条航道 是需要时间的,对于航道 j,任意飞船驶过它所花费的时间为 tj,并且任意两艘飞船之 间不会产生任何干扰. 为了鼓励科技创新,L 国国王同意小 P 的

[BZOJ4326][codevs4632][codevs5440][UOJ#150][NOIP2015]运输计划

试题描述 公元 2044 年,人类进入了宇宙纪元. L 国有 n 个星球,还有 n?1 条双向航道,每条航道建立在两个星球之间,这 n?1 条航道连通了 L 国的所有星球. 小 P 掌管一家物流公司, 该公司有很多个运输计划,每个运输计划形如:有一艘物流飞船需要从 ui 号星球沿最快的宇航路径飞行到 vi 号星球去.显然,飞船驶过一条航道是需要时间的,对于航道 j,任意飞船驶过它所花费的时间为 tj,并且任意两艘飞船之间不会产生任何干扰. 为了鼓励科技创新, L 国国王同意小 P 的物流公司参与

NOIP 2015 DAY2

跳石头 题目背景 一年一度的“跳石头”比赛又要开始了! 题目描述 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N 块岩石(不含起点和终 点的岩石).在比赛过程中,选手们将从起点出发,每一步跳向相邻的岩石,直至到达 终点. 为了提高比赛难度,组委会计划移走一些岩石,使得选手们在比赛过程中的最短跳 跃距离尽可能长.由于预算限制,组委会至多从起点和终点之间移走 M 块岩石(不能 移走起点和终点的岩石). 输入输出格式