답안 #147643

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
147643 2019-08-30T10:52:43 Z BorisBarca Automobil (COCI17_automobil) C++14
10 / 100
1000 ms 8188 KB
/*
	$$$$$$$\                      $$\           $$$$$$$\
	$$  __$$\                     \__|          $$  __$$\
	$$ |  $$ | $$$$$$\   $$$$$$\  $$\  $$$$$$$\ $$ |  $$ | $$$$$$\   $$$$$$\   $$$$$$$\ $$$$$$\
	$$$$$$$\ |$$  __$$\ $$  __$$\ $$ |$$  _____|$$$$$$$\ | \____$$\ $$  __$$\ $$  _____|\____$$\
	$$  __$$\ $$ /  $$ |$$ |  \__|$$ |\$$$$$$\  $$  __$$\  $$$$$$$ |$$ |  \__|$$ /      $$$$$$$ |
	$$ |  $$ |$$ |  $$ |$$ |      $$ | \____$$\ $$ |  $$ |$$  __$$ |$$ |      $$ |     $$  __$$ |
	$$$$$$$  |\$$$$$$  |$$ |      $$ |$$$$$$$  |$$$$$$$  |\$$$$$$$ |$$ |      \$$$$$$$\\$$$$$$$ |
	\_______/  \______/ \__|      \__|\_______/ \_______/  \_______|\__|       \_______|\_______|
*/
#include <bits/stdc++.h>

using namespace std;

#define PB push_back
#define MP make_pair
#define INS insert
#define LB lower_bound
#define UB upper_bound
#define pii pair <int,int>
#define pll pair <long long, long long>
#define si pair<string, int>
#define is pair<int, string>
#define X first
#define Y second
#define _ << " " <<
#define sz(x) (int)x.size()
#define all(a) (a).begin(),(a).end()
#define FOR(i, a, b) for (int i = (a); i < (b); ++i)
#define FORD(i, a, b) for (int i = (a); i > (b); --i)
#define FORR(i, l, r) for (int i = (l); i <= (r); ++i)
#define FORP(i, a, b) for ((i) = (a); (i) < (b); ++i)
#define FORA(i, x) for (auto &i : x)
#define REP(i, n) FOR(i, 0, n)
#define BITS(x) __builtin_popcount(x)
#define MSET memset
#define MCPY memcpy
#define SQ(a) (a) * (a)
#define TRACE(x) cout << #x " = " << (x) << '\n';
#define YES cout << "YES\n"
#define NO cout << "NO\n"

typedef long long ll;
typedef long double ld;
typedef vector <int> vi;
typedef vector <pii> vpi;
typedef vector <ll> vll;
typedef vector <pll> vpl;
typedef vector <double> vd;
typedef vector <ld> vld;
typedef vector<si> vsi;
typedef vector<is> vis;
typedef vector<string> vs;
//((float) t)/CLOCKS_PER_SEC

const int MOD = 1e9 + 7;
const double PI = acos(-1);
const int LOG = 19;
const int INF = 1e9 + 10;
const ll INFL = 1e18 + 10;
const int ABC = 30;
const int dx[] = {-1, 1, 0, 0};
const int dy[] = {0, 0, -1, 1};
const int dox[] = {-1, 1, 0, 0, -1, -1, 1, 1};
const int doy[] = {0, 0, -1, 1, -1, 1, -1, 1};

inline int sum(int a, int b){
  if (a + b >= MOD)
  	return a + b - MOD;
  if (a + b < 0)
  	return a + b + MOD;
  return a + b;
}

inline void add(int &a, int b){
  a = sum(a, b);
}

inline int mul(int a, int b){
  return (ll)a * (ll)b % MOD;
}

inline int sub(int a, int b){
	return (a - b + MOD) % MOD;
}

inline int pot(ll pot, int n){
	ll ret = 1;
	while (n){
		if (n & 1)
			ret = (ret * pot) % MOD;
		pot = (pot * pot) % MOD;
		n >>= 1;
	}
	return ret;
}

inline int divide(int a, int b){
	return mul(a, pot(b, MOD - 2));
}

ll lcm(ll a, ll b){
	return abs(a * b) / __gcd(a, b);
}

inline double ccw(pii A, pii B, pii C){
	return (A.X * B.Y) - (A.Y * B.X) + (B.X * C.Y) - (B.Y * C.X) + (C.X * A.Y) - (C.Y * A.X);
}

inline int CCW(pii A, pii B, pii C){
	double val = ccw(A, B, C);
	double eps = max(max(abs(A.X), abs(A.Y)), max(max(abs(B.X), abs(B.Y)), max(abs(C.X), abs(C.Y)))) / 1e9;
	if (val <= -eps)
		return -1;
	if (val >= eps)
		return 1;
	return 0;
}

void to_upper(string &x){
	REP(i, sz(x))
		x[i] = toupper(x[i]);
}

void to_lower(string &x){
	REP(i, sz(x))
		x[i] = tolower(x[i]);
}

string its(ll x){
	if (x == 0)
		return "0";
	string ret = "";
	while (x > 0){
		ret += (x % 10) + '0';
		x /= 10;
	}
	reverse(all(ret));
	return ret;
}

ll sti(string s){
	ll ret = 0;
	REP(i, sz(s)){
		ret *= 10;
		ret += (s[i] - '0');
	}
	return ret;
}

const int N = 1e6 + 10;

int n, m, r[N], c[N];

int gauss(int x){
	return (x * (x + 1) / 2) % MOD;
}

int row(int x){
	int a = mul(x, m);
	int b = mul(sub(x, 1), m);
	return sub(gauss(a), gauss(b));
}

int main () {
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

	cin >> n >> m;
	REP(i, n)
		r[i + 1] = 1;

	REP(i, m)
		c[i + 1] = 1;

	int a = 0, b = 0;
	int k; cin >> k;
	REP(i, k){
		char t; cin >> t;
		int x, y; cin >> x >> y;
		if (t == 'R')
			r[x] = mul(r[x], y), a++;
		else
			c[x] = mul(c[x], y), b++;
	}

	int sol = divide(mul(mul(n, m), mul(n, m) + 1), 2);
	
	vpi s;
	FOR(i, 1, m + 1)
		if (c[i] != 1)
			s.PB({i, c[i]});

	FOR(i, 1, n + 1){
		if (r[i] == 0){
			sol = sub(sol, row(i));
			continue;
		}
		add(sol, mul(sub(r[i], 1), row(i)));
		FORA(x, s){
			int j = x.X;
			if (c[j] == 1)
				continue;
			if (c[j] == 0){
				sol = sub(sol, mul(r[i], sum(mul(sub(i, 1), m), j)));
				continue;
			}
			sol = sub(sol, mul(r[i], sum(mul(sub(i, 1), m), j)));
			add(sol, mul(mul(r[i], c[j]), sum(mul(sub(i, 1), m), j)));
		}
	}
	cout << sol << '\n';

	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 2 ms 376 KB Output isn't correct
2 Incorrect 4 ms 376 KB Output isn't correct
3 Correct 2 ms 376 KB Output is correct
4 Correct 3 ms 380 KB Output is correct
5 Incorrect 5 ms 408 KB Output isn't correct
6 Incorrect 3 ms 376 KB Output isn't correct
7 Incorrect 6 ms 376 KB Output isn't correct
8 Incorrect 4 ms 376 KB Output isn't correct
9 Incorrect 4 ms 376 KB Output isn't correct
10 Incorrect 5 ms 376 KB Output isn't correct
11 Incorrect 936 ms 1656 KB Output isn't correct
12 Execution timed out 1069 ms 4600 KB Time limit exceeded
13 Incorrect 87 ms 632 KB Output isn't correct
14 Incorrect 558 ms 5368 KB Output isn't correct
15 Execution timed out 1076 ms 4728 KB Time limit exceeded
16 Execution timed out 1072 ms 8184 KB Time limit exceeded
17 Execution timed out 1076 ms 8184 KB Time limit exceeded
18 Execution timed out 1064 ms 8184 KB Time limit exceeded
19 Execution timed out 1083 ms 8184 KB Time limit exceeded
20 Execution timed out 1076 ms 8188 KB Time limit exceeded