NEERC 2015 Adjustment Officeoj25993

mac2022-06-30  27

题目大意:

输入n,q; 矩阵大小为n*n 每个位置的值为该位置的行数+列数

接下来q行

“R m”表示输出第m行的总和并整行消去

“C m”表示输出第m列的总和并整列消去

Sample Input

3 7R 2C 3R 2R 1C 2C 1R 3

Sample Output

121005540

  即 3*3的矩阵 2   3   4 | 9 3   4   5 | 12 4    5    6 | 15 9  12 15   R 2 输出12 后 sumr=2,r=1 2   3   4 | 9 0   0   0 | 0 4   5   6 | 15 6   8  10 C 3 输出10 后 suml=3,l=1 2   3   0 | 9 0   0   0 | 0 4   5   0 | 15 6   8   0 ...... 可发现在C 3时 时可由15-r*3-sumr得出 因为每个位置对应的值为 行数加列数 则 整列的总和 = 行的总数*列数+行数总和 则整列的值 = 原本的总和 - 消去的行的总数*列数 - 消去的行数总和 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; long long row[1000010],col[1000010]; int main() { long long n,q; while(~scanf("%lld%lld",&n,&q)){ long long sum=n+(n+1)*n/2; for(int i=1; i<=n; i++) { row[i]=col[i]=sum; sum+=n; } long long sumc,sumr,l,r,c; sumc=sumr=c=r=0; char op; for(int i=1; i<=q; i++) { scanf(" %c%lld",&op,&l); if(op=='R') { if(row[l]==0) printf("0\n"); else { printf("%lld\n",row[l]-sumc-l*c); sumr+=l; r++; /// 记录消去的行的 总和 和 数量 row[l]=0; /// 标记为已消去的行 } } else if(op=='C') { if(col[l]==0) printf("0\n"); else { printf("%lld\n",col[l]-sumr-r*l); sumc+=l; c++; /// 记录消去的列的 总和 和数量 col[l]=0; /// 标记为已消去的列 } } } } return 0; } View Code

 

转载于:https://www.cnblogs.com/zquzjx/p/8876418.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)