Ir ao conteúdo
  • Cadastre-se

Esmeraldo Euclides Carneiro Junior

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

1
  1. Gostaria da ajuda de vocês, sou estudante e não tenho conhecimento ainda de C++. E queria saber se alguém consegue passar esse algoritmo para linguagem C. #include <stdio.h> #include <iostream> #include <vector> #include <cmath> #include <cstdlib> using namespace std; #define i64 long long i64 GCD(i64 a,i64 b){ while(b){b ^= a ^=b ^= a %=b;} return a;} struct point{ i64 x,y; point (i64 p1 , i64 p2){ x = p1; y = p2; } }; i64 poly_area( vector<point>P){ // calculate area of polygoan/convex i64 res = 0 , x1 ,y1,x2,y2; for( int i = 0 , sz = P.size() ; i < sz ; i++ ){ x1 = P[i].x , x2 = P[(i+1)%sz].x; y1 = P[i].y , y2 = P[(i+1)%sz].y; res += ( x1 * y2 - x2 * y1 ); } // res is the determinant of these points return fabs(res)*0.5 ; } i64 getBorderPoints(vector<point>P){ i64 B = 0 ; int n = P.size(); for( int i = 0, j = n - 1; i < n; j = i++ ) { i64 ret = GCD( abs( P[i].x - P[j].x ), abs( P[i].y - P[j].y ) ); B += ret; } return B ; } int main() { int i , n ; while(scanf("%d",&n) && n ) { vector<point>P; for( i = 0 ; i < n ; i++ ){ i64 x,y; scanf("%lld %lld",&x,&y); P.push_back( point(x,y) ); } i64 A = poly_area(P); i64 B = getBorderPoints(P); i64 I = A + 1 - B/2 ; // picks theorem : A = I + B/2 - 1 printf("%lld\n",I); } }

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!