Tuesday, 25 February 2014

Number of zeros in a given range-

Question link:- No of zeros


#include<iostream>
#include<stdio.h>
using namespace std;

long long int zeros(long long int n){

long long int i=1;
long long int cnt=0;

while(1){
long long int b=n/i;
long long int c=n%i;
long long int a=b/10;
              b=b%10;
            if(a==0)break;

            if(b==0)
            cnt+=(a-1)*i+c+1;
            else
            cnt+=a*i;
            i*=10;
        }
            return cnt;
        }

int main(){
int t;
scanf("%d",&t);
while(t--){
long long int a,b;
scanf("%lld%lld",&a,&b);
printf("%lld\n",zeros(b)-zeros(a-1));
}
}

For explanation of algoclick here

Friday, 21 February 2014

Number of islands

All connected 1's (directly or diagonally) considered as one island.
see the test cases for more description.



#include<iostream>
#include<stdio.h>

int a[1000][1000];


void fun(int i,int j,int n){
if(i<0 || j<0 ||i>n-1 || j>n-1)
return;

if(a[i][j]==0)return;

a[i][j]=0;
fun(i-1,j-1,n);
fun(i-1,j,n);
fun(i,j-1,n);
fun(i-1,j+1,n);
fun(i+1,j-1,n);
fun(i+1,j,n);
fun(i,j+1,n);
fun(i+1,j+1,n);

}

using namespace std;

int main(){

int t;
scanf("%d",&t);
while(t--){
int n;
scanf("%d",&n);

for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%d",&a[i][j]);

int cnt=0;

for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
    if(a[i][j]==1 )  {
    cnt++;
    fun(i,j,n);
    }
    }
    }
printf("%d\n",cnt);

}
}


Sample Input: 
2


1 0 0 1 
0 0 0 0 
0 1 1 0 
1 0 0 1 


0 0 1 0 0 1 0 0 
1 0 0 0 0 0 0 1 
0 0 1 0 0 1 0 1 
0 1 0 0 0 1 0 0 
1 0 0 0 0 0 0 0 
0 0 1 1 0 1 1 0 
1 0 1 1 0 1 1 0 
0 0 0 0 0 0 0 0 

Sample Output: 

9

Wednesday, 19 February 2014


Number of  Digit in a Given Range



#include<iostream>
#include<stdio.h>
using namespace std;

int a[10][1000001];

int main(){
a[0][0]=1;
for(int i=1;i<=1000000;i++){
    int n=i;
    while(n){
    a[n%10][i]++;
    n=n/10;

    }

    a[0][i]+=a[0][i-1];
    a[1][i]+=a[1][i-1];
    a[2][i]+=a[2][i-1];
    a[3][i]+=a[3][i-1];
    a[4][i]+=a[4][i-1];
    a[5][i]+=a[5][i-1];
    a[6][i]+=a[6][i-1];
    a[7][i]+=a[7][i-1];
    a[8][i]+=a[8][i-1];
    a[9][i]+=a[9][i-1];
}

//uncomment this to see the table.
/*        
for(int j=0;j<10;j++){
for(int i=20;i<=40;i++)
cout<<a[j][i]<<"  ";
cout<<endl;
}
*/

int t;
cin>>t;          //no of times u wanna query
while(t--){
int r1,r2,num,ans;
cin>>r1>>r2>>num;                   //lower limit , upper limit ,  and number like  1 18 1
if(r1==0)
ans=a[num][r2];
else
ans=a[num][r2]-a[num][r1-1];
cout<<ans<<endl;

}



}