U135649 皇室战争 TJ

题目链接

思路

按照斜率每次清除整条路上的骷髅(暴力算法),存图选用 \(vector <string>\),考场上直接开超大的 \(char\) \(MLE\) 了。

代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
vector <string > c;
string s;
int n ,m ,x ,y ,ans = 0;
void yuefen (int &r1 ,int &r2) {
	int r = __gcd (abs (r1) ,abs (r2));
	r1 /= r ,r2 /= r;
}
int main () {
	ios_base::sync_with_stdio (0);
	c.clear();
	cin >> n >> m;
	for (int q = 0;q < n;++ q) {
		cin >> s;
		c.push_back (s);
		for (int w = 0;w < m;++ w) {
			if (s[w] == 'S')
				x = q ,y = w;
		}
	}
	for (int q = 0;q < n;++ q) {
		for (int w = 0;w < m;++ w) {
			if (c[q][w] == 'K') {
				ans ++;
				int tx ,ty ,ttx ,tty ,xx ,yy;
				xx = x ,yy = y;
				ttx = q - x ,tty = w - y;
				yuefen (ttx ,tty);
				tx = ttx ,ty = tty;
				xx += tx ,yy += ty;
				for ( ;xx >= 0 && xx < n && yy >= 0 && yy < m ;) {
					c[xx][yy] = '.';
					xx += tx ,yy += ty;
				}
			}
		}
	}
	cout << ans << endl;
	return 0;
}

上一篇:NOIP普及组 棋盘 题解


下一篇:CF1070A Find a Number