您的位置:首页 > 其它

Gym 100851A - Adjustment Office(模拟)

2016-09-21 17:18 447 查看
题意:给出一个n行n列的表,进行查询一行或一列的值,每个单元格的值为行号与列号的和,每一行或一列被查询一次后都置为零。

挺水的题,记录一下每一行每一列剩下的列号或者行号的总和,以及剩下的个数,并进行跟新就好了。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int id[2][1000010];
long long r, c, nr, nc;
long long deal(int s, int d) {
if(id[s][d]) return 0;
id[s][d] = 1;
long long ans = 0;
if(s) {
ans = nr * d + r;
nc--;
c -= d;
}
else {
ans = nc * d + c;
nr--;
r -= d;
}
return ans;
}
int main() {
freopen("adjustment.in", "r", stdin);
freopen("adjustment.out", "w", stdout);
int n, m, i, j, d, s;
char ch[10];
while(~scanf("%d%d", &n, &m)) {
r = c = (long long)(1 + n) * n / 2;
memset(id, 0, sizeof(id));
nr = nc = n;
while(m--) {
scanf("%s%d", ch, &d);
if(ch[0] == 'R')
s = 0;
else s = 1;
printf("%I64d\n", deal(s, d));
}
}
return 0;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Gym 100851A