HPU 1151(思维)
来源:互联网 发布:浙江软件考试报名 编辑:程序博客网 时间:2024/06/13 08:00
问题:
n * n的棋盘,每格上放有豆子,个数是 行数 和 列数 的和,
一次拿走 一行,或一列,
求拿走的个数。
输入:
多组测试数据。
第一行为两个整数,n,q(1 ≤ n ≤ 10^6,1 ≤ q ≤ 10^5),分别代表棋盘有n行n列,取q次
下面q行有两种形式:
R k代表取出第k行,并输出该行的豆子总数。
C k代表取出第k列,并输出该列的豆子总数。
输出:
每次取走的个数
样例输入
3 2R 1C 1
样例输出
97
123123423453456如上表,n=3,可以观察到,后一 行/列 的总个数比前一 行/列 的总个数多 n。
所以,第一行/列 总个数,s = (2+(n+1))*n/2;
第 n 行/列 的总个数 ,sn = s+(n-1)*n;
因为拿走就不存在了,所以 上述的 sn 要 减去不存在的,
假如:2、3 两 列已经拿走了,那么 任意 第 r 行都 少 了 2*r+(2+3) 个!!! (难点!!!)
因为 每个格子 都是 行 加 列。
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <math.h>long long i[1000010],j[1000010];int main(){ char a; long long n,t,x,s; // n 行 n列,t组测试数据 long long h,h1,l,l1; while(scanf("%lld %lld",&n,&t)!=EOF) { h = 0,h1 = 0,l = 0,l1 = 0; memset(i,0,sizeof(i)); memset(j,0,sizeof(j)); while(t--) { getchar(); scanf("%c%lld",&a,&x); // R 行 C 列 s = (3+n)*n/2; //第一行/列的个数 s += (x - 1)*n; // 原本第x 行/列的个数 if(a=='R') { if(i[x]==0) { i[x]=1; h+=x; h1++; // 共 取走 了几行 s-=(x*l1+l); } else // 如果之一行已经取走了 { printf("0\n"); continue; } } else { if(j[x]==0) { j[x]=1; l+=x; l1++; // 共取走了几列 s-=(x*h1+h); } else //如果这一列已经取走了 { printf("0\n"); continue; } } printf("%lld\n",s); } } return 0;}
阅读全文
0 0
- HPU 1151(思维)
- [HPU] Triangles [思维]
- 【HPU 1193 Interval】+ 二分 + 思维
- 【HPU 1046 QAQ的数学问题】+ 思维
- HPU 1195: Mod【二分&单调队列&思维】
- HPU
- [HPU
- [HPU
- 【HPU 1048 QAQ的纸币问题(二)】+ 思维
- 【HPU 1047 QAQ的纸币问题(一)】+ 思维
- 【HPU 1195 Mod 】+ 思维 +DFS + 区间剖分
- 【HPU-OJ】Divide the pears(数学,思维)
- 【HPU-oj】-Triangles(锐角三角形个数,数学,思维)
- hpu暑假训练 E: YK的书架【思维】
- 【HPU OJ 1310 】序列的区间操作 【思维】
- 【hpu oj 1008 QAQ的矩阵价值 思维】
- 【hpu oj 1009 QAQ的区间价值 思维】
- 【hpu oj 1012: QAQ的区间统计 [思维]】
- php类的重载函数简单的实现
- SSL/TLS
- qt5 ubuntu 14.04安装与配置
- bzoj 5094: 硬盘检测(概率)
- Logistic回归计算过程的推倒
- HPU 1151(思维)
- Verilog中assign的使用
- 多样沉浸式要点总结(看了必有收获)
- 字符串翻转操作
- 小鑫爱运动
- 动态规划(二)暴力递归的优化之路——数字三角形最大路径和
- 171208 逆向、杂项-协会培训稿
- 《OpenCV的头文件和命名空间》
- (详细可用)分布式锁实现 Java + redis (一)