結果

問題 No.440 2次元チワワ問題
ユーザー latte0119
提出日時 2016-10-29 00:11:21
言語 C++11(廃止可能性あり)
(gcc 13.3.0)
結果
AC  
実行時間 166 ms / 5,000 ms
コード長 3,380 bytes
コンパイル時間 1,819 ms
コンパイル使用メモリ 160,524 KB
実行使用メモリ 17,024 KB
最終ジャッジ日時 2024-11-24 06:47:32
合計ジャッジ時間 3,304 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 26
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function ‘void query()’:
main.cpp:38:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   38 |     scanf("%lld%lld%lld%lld",&y,&x,&yy,&xx);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
main.cpp: In function ‘int main()’:
main.cpp:66:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   66 |     scanf("%lld%lld",&H,&W);
      |     ~~~~~^~~~~~~~~~~~~~~~~~
main.cpp:67:18: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   67 |     rep(i,H)scanf("%s",fld[i]);
      |             ~~~~~^~~~~~~~~~~~~
main.cpp:127:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  127 |     scanf("%lld",&Q);
      |     ~~~~~^~~~~~~~~~~

ソースコード

diff #
プレゼンテーションモードにする

#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef vector<int>vint;
typedef pair<int,int>pint;
typedef vector<pint>vpint;
#define rep(i,n) for(int i=0;i<(n);i++)
#define reps(i,f,n) for(int i=(f);i<(n);i++)
#define all(v) (v).begin(),(v).end()
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();it++)
#define pb push_back
#define fi first
#define se second
template<typename A,typename B>inline void chmin(A &a,B b){if(a>b)a=b;}
template<typename A,typename B>inline void chmax(A &a,B b){if(a<b)a=b;}
int H,W;
char fld[555][555];
int sumC[555][555];
int val[555][555];
int P[555][555];//->
int Q[555][555];//<-
int R[555][555];//v
int S[555][555];//^
inline int fC(int a,int b,int c,int d){
return sumC[c][d]-sumC[c][b]-sumC[a][d]+sumC[a][b];
}
inline int fW(int a,int b,int c,int d){
return (c-a)*(d-b)-fC(a,b,c,d);
}
void query(){
int y,x,yy,xx;
scanf("%lld%lld%lld%lld",&y,&x,&yy,&xx);
y--;x--;
int ans=val[yy][xx]-val[yy][x]-val[y][xx]+val[y][x];
for(int i=y;i<yy;i++){
int w=fW(i,x,i+1,xx);
ans-=fC(i,0,i+1,x)*w*fW(i,xx,i+1,W);
ans-=fW(i,0,i+1,x)*w*fC(i,xx,i+1,W);
ans-=(P[i][x]-P[i][xx]-fC(i,x,i+1,xx)*fW(i,xx,i+1,W))*fW(i,xx,i+1,W);
ans-=(Q[i][xx]-Q[i][x]-fC(i,x,i+1,xx)*fW(i,0,i+1,x))*fW(i,0,i+1,x);
ans-=fC(i,0,i+1,x)*w*(w-1)/2;
ans-=fC(i,xx,i+1,W)*w*(w-1)/2;
}
for(int j=x;j<xx;j++){
int w=fW(y,j,yy,j+1);
ans-=fC(0,j,y,j+1)*w*fW(yy,j,H,j+1);
ans-=fW(0,j,y,j+1)*w*fC(yy,j,H,j+1);
ans-=(R[y][j]-R[yy][j]-fC(y,j,yy,j+1)*fW(yy,j,H,j+1))*fW(yy,j,H,j+1);
ans-=(S[yy][j]-S[y][j]-fC(y,j,yy,j+1)*fW(0,j,y,j+1))*fW(0,j,y,j+1);
ans-=fC(0,j,y,j+1)*w*(w-1)/2;
ans-=fC(yy,j,H,j+1)*w*(w-1)/2;
}
printf("%lld\n",ans);
}
signed main(){
scanf("%lld%lld",&H,&W);
rep(i,H)scanf("%s",fld[i]);
for(int i=0;i<H;i++){
int cnt=0;
for(int j=W-1;j>=0;j--){
if(fld[i][j]=='w')cnt++;
else{
P[i][j]=cnt;
}
P[i][j]+=P[i][j+1];
}
cnt=0;
for(int j=0;j<W;j++){
if(fld[i][j]=='w')cnt++;
else{
Q[i][j+1]=cnt;
}
Q[i][j+1]+=Q[i][j];
}
}
for(int j=0;j<W;j++){
int cnt=0;
for(int i=H-1;i>=0;i--){
if(fld[i][j]=='w')cnt++;
else{
R[i][j]=cnt;
}
R[i][j]+=R[i+1][j];
}
cnt=0;
for(int i=0;i<H;i++){
if(fld[i][j]=='w')cnt++;
else{
S[i+1][j]=cnt;
}
S[i+1][j]+=S[i][j];
}
}
rep(i,H){
rep(j,W){
sumC[i+1][j+1]=fld[i][j]=='c';
sumC[i+1][j+1]+=sumC[i][j+1]+sumC[i+1][j]-sumC[i][j];
}
}
rep(i,H){
rep(j,W){
if(fld[i][j]=='w'){
val[i+1][j+1]+=fC(0,j,i,j+1)*fW(i+1,j,H,j+1);
val[i+1][j+1]+=fC(i+1,j,H,j+1)*fW(0,j,i,j+1);
val[i+1][j+1]+=fC(i,0,i+1,j)*fW(i,j+1,i+1,W);
val[i+1][j+1]+=fC(i,j+1,i+1,W)*fW(i,0,i+1,j);
}
val[i+1][j+1]+=val[i][j+1]+val[i+1][j]-val[i][j];
}
}
int Q;
scanf("%lld",&Q);
while(Q--){
query();
}
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0