#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
int r[ 100 ] ;
int c[ 100 ] ;
class Solution{
public :
int numSpecial( vector< vector< int >> & mat) {
int i;
int x = mat.size ( ) ;
int y = mat[ 0 ] .size ( ) ;
int res = 0 ;
for ( i= ( 0 ) ; i< ( x) ; i++ ) {
r[ i] = 0 ;
}
for ( i= ( 0 ) ; i< ( y) ; i++ ) {
c[ i] = 0 ;
}
for ( i= ( 0 ) ; i< ( x) ; i++ ) {
int j;
for ( j= ( 0 ) ; j< ( y) ; j++ ) {
r[ i] + = mat[ i] [ j] ;
}
}
for ( i= ( 0 ) ; i< ( x) ; i++ ) {
int j;
for ( j= ( 0 ) ; j< ( y) ; j++ ) {
c[ j] + = mat[ i] [ j] ;
}
}
for ( i= ( 0 ) ; i< ( x) ; i++ ) {
int j;
for ( j= ( 0 ) ; j< ( y) ; j++ ) {
if ( mat[ i] [ j] && r[ i] == c[ j] && c[ j] == 1 ) {
res++ ;
}
}
}
return res;
}
}
;
// cLay varsion 20200913-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// int r[100], c[100];
//
// class Solution {
// public:
// int numSpecial(vector<vector<int>>& mat) {
// int x = mat.size(), y = mat[0].size(), res = 0;
// rep(i,x) r[i] = 0;
// rep(i,y) c[i] = 0;
// rep(i,x) rep(j,y) r[i] += mat[i][j];
// rep(i,x) rep(j,y) c[j] += mat[i][j];
// rep(i,x) rep(j,y) if(mat[i][j] && r[i]==c[j]==1) res++;
// return res;
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgcmV0dXJuIDA7Cn0KI3VuZGVmIG1haW4KaW50IHJbMTAwXTsKaW50IGNbMTAwXTsKY2xhc3MgU29sdXRpb257CiAgcHVibGljOgogIGludCBudW1TcGVjaWFsKHZlY3Rvcjx2ZWN0b3I8aW50Pj4mIG1hdCl7CiAgICBpbnQgaTsKICAgIGludCB4ID0gbWF0LnNpemUoKTsKICAgIGludCB5ID0gbWF0WzBdLnNpemUoKTsKICAgIGludCByZXMgPSAwOwogICAgZm9yKGk9KDApO2k8KHgpO2krKyl7CiAgICAgIHJbaV0gPSAwOwogICAgfQogICAgZm9yKGk9KDApO2k8KHkpO2krKyl7CiAgICAgIGNbaV0gPSAwOwogICAgfQogICAgZm9yKGk9KDApO2k8KHgpO2krKyl7CiAgICAgIGludCBqOwogICAgICBmb3Ioaj0oMCk7ajwoeSk7aisrKXsKICAgICAgICByW2ldICs9IG1hdFtpXVtqXTsKICAgICAgfQogICAgfQogICAgZm9yKGk9KDApO2k8KHgpO2krKyl7CiAgICAgIGludCBqOwogICAgICBmb3Ioaj0oMCk7ajwoeSk7aisrKXsKICAgICAgICBjW2pdICs9IG1hdFtpXVtqXTsKICAgICAgfQogICAgfQogICAgZm9yKGk9KDApO2k8KHgpO2krKyl7CiAgICAgIGludCBqOwogICAgICBmb3Ioaj0oMCk7ajwoeSk7aisrKXsKICAgICAgICBpZihtYXRbaV1bal0gJiYgcltpXT09Y1tqXSAmJiBjW2pdPT0xKXsKICAgICAgICAgIHJlcysrOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlczsKICB9Cn0KOwovLyBjTGF5IHZhcnNpb24gMjAyMDA5MTMtMQoKLy8gLS0tIG9yaWdpbmFsIGNvZGUgLS0tCi8vICNkZWZpbmUgbWFpbiBkdW1teV9tYWluCi8vIHt9Ci8vICN1bmRlZiBtYWluCi8vIAovLyBpbnQgclsxMDBdLCBjWzEwMF07Ci8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICBpbnQgbnVtU3BlY2lhbCh2ZWN0b3I8dmVjdG9yPGludD4+JiBtYXQpIHsKLy8gICAgIGludCB4ID0gbWF0LnNpemUoKSwgeSA9IG1hdFswXS5zaXplKCksIHJlcyA9IDA7Ci8vICAgICByZXAoaSx4KSByW2ldID0gMDsKLy8gICAgIHJlcChpLHkpIGNbaV0gPSAwOwovLyAgICAgcmVwKGkseCkgcmVwKGoseSkgcltpXSArPSBtYXRbaV1bal07Ci8vICAgICByZXAoaSx4KSByZXAoaix5KSBjW2pdICs9IG1hdFtpXVtqXTsKLy8gICAgIHJlcChpLHgpIHJlcChqLHkpIGlmKG1hdFtpXVtqXSAmJiByW2ldPT1jW2pdPT0xKSByZXMrKzsKLy8gICAgIHJldHVybiByZXM7Ci8vICAgfQovLyB9Owo=