Cod sursa(job #2489329)

Utilizator richard26Francu Richard richard26 Data 8 noiembrie 2019 15:42:55
Problema Cele mai apropiate puncte din plan Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
	
#include <bits/stdc++.h>
	
 
	
using namespace std;
	
 
	
long long pw2[100];
	
 
	
int divide(int x, int y, int dim) {
	
 
	
    if (dim == 0) {
	
        return 0;
	
    } 
	
 
	
    int len = pw2[dim -1];
	
 
	
        if (x <= len && y <= len ) {
	
 
	
            return divide(y, x, dim - 1);
	
        } 
	
 
	
        if (x > len && y <= len) {
	
 
	
            return len * len + divide(x - len, y, dim - 1);
	
        }
	
 
	
        if (x > pw2[dim -1] && y > len) {
	
 
	
            return 2 * len * len + divide(x - len, y - len, dim - 1);
	
        }
	
 
	
        return 3 * len * len + divide( 2 * len - y + 1, len - x + 1, dim - 1);
	
        
	
    
	
 
	
    
	
    
	
}
	
 
	
int main()
	
{
	
 
	
    ifstream f("fractal.in");
	
    ofstream g("fractal.out");
	
    pw2[0] = 1;
	
    int x, y, k;
	
 
	
    
	
    f >> k >> x >> y;
	
    for (int i = 1; i <= 30; i++) {
	
        pw2[i] = 2 * pw2[i - 1];
	
        //cout << pw2[i] << endl;
	
    }
	
    g << divide(y, x, k);
	
}