結果
| 問題 |
No.440 2次元チワワ問題
|
| コンテスト | |
| ユーザー |
dohatsutsu
|
| 提出日時 | 2016-10-29 01:25:26 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 910 ms / 5,000 ms |
| コード長 | 2,220 bytes |
| コンパイル時間 | 2,376 ms |
| コンパイル使用メモリ | 159,504 KB |
| 実行使用メモリ | 14,208 KB |
| 最終ジャッジ日時 | 2024-11-24 07:03:52 |
| 合計ジャッジ時間 | 8,442 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 26 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int N,M,Q;
int ay[10005];
int ax[10005];
int by[10005];
int bx[10005];
char t[505][505];
ll CWW[505][505];//cww
ll CW[505][505];//cw
ll WW[505][505];//ww
ll C[505][505];//c
ll W[505][505];//w
ll ans[10005];
void solve(){
/*
cout<<N<<' '<<M<<endl;
for(int i=1;i<=N;i++){
for(int j=1;j<=M;j++){
cout<<t[i][j];
}
cout<<endl;
}
*/
for(int q=0;q<Q;q++){
// cout<<ay[q]<<' '<<ax[q]<<' '<<by[q]<<' '<<bx[q]<<" = ";
int L=ax[q]-1;
int R=bx[q];
ll sum=0;
for(int y=ay[q];y<=by[q];y++){
ll p0=CWW[y][R]-CWW[y][L];
ll ww=(W[y][R]-W[y][L]);
ww= ww*(ww-1)/2;
ll p1= C[y][L]*ww;
ll p2= CW[y][L]*(W[y][R]-W[y][L]);
ll num=p0-p1-p2;
if(ay[q]==3&&ax[q]==3&&by[q]==5&&bx[q]==5){
// cout<<p0<<' '<<p1<<' '<<p2<<endl;
}
sum+=num;
}
ans[q]+=sum;
}
}
char T[505][505];
void init(){
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++)
T[i][j]=t[i][j];
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++)
t[M+1-j][i]=T[i][j];
for(int i=0;i<Q;i++){
ll AY=ay[i];
ll AX=ax[i];
ll BY=by[i];
ll BX=bx[i];
ay[i]=M+1-AX;
ax[i]=AY;
by[i]=M+1-BX;
bx[i]=BY;
if(ay[i]>by[i])swap(ay[i],by[i]);
if(ax[i]>bx[i])swap(ax[i],bx[i]);
}
swap(N,M);
memset(CWW,0,sizeof(CWW));
memset(CW,0,sizeof(CW));
memset(WW,0,sizeof(WW));
memset(C,0,sizeof(C));
memset(W,0,sizeof(W));
for(int i=1;i<=N;i++){
ll c=0;
ll cw=0;
ll cww=0;
ll ww=0;
ll w=0;
for(int j=1;j<=M;j++){
if(t[i][j]=='c'){
c++;
}
if(t[i][j]=='w'){
cww+=cw;
ww+=w;
cw+=c;
w++;
}
CWW[i][j]=cww;
CW[i][j]= cw ;
WW[i][j]= ww ;
C[i][j]= c ;
W[i][j]= w ;
}
}
}
int main(){
cin>>N>>M;
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++)
cin>>t[i][j];
cin>>Q;
for(int i=0;i<Q;i++)
cin>>ay[i]>>ax[i]>>by[i]>>bx[i];
for(int T=0;T<4;T++){
init();
solve();
}
for(int i=0;i<Q;i++){
cout<<ans[i]<<endl;
}
return 0;
}
dohatsutsu