2014-04-16 2 views
2

차이점 문제를 http://www.infoarena.ro/problema/aria 해결하려고했지만 첫 번째 코드를 사용하여 초과 제한 시간이 두 번째 모든 작동합니다 . 그럼이 둘의 차이점은 무엇입니까?차이점 Cout set_precision (5) + 고정 및 printf ("% lf.5", var)

#include <fstream> 
#include <vector> 
#include <stdlib.h> 
#include <iomanip> 
#include <cmath> 
#define max 1000000 
using namespace std; 

ifstream fin("aria.in"); 
ofstream fout("aria.out"); 

int N; 
vector< pair<double,double> > points; 

double tri_area(pair<double, double> p1, pair<double,double> p2){ 

    return p1.first * p2.second - p2.first * p1.second; 
} 

double find_area(){ 
    double area = 0; 
    for(int i = 0; i < N-1; i++){ 
     area += tri_area(points[i],points[i+1]); 
    } 
    area += tri_area(points[N-1], points[0]); 
    return abs(area)/2; 
} 

int main(){ 
    fin >> N; 
    double x, y; 
    for(int i = 0; i < N; i++){ 
     fin >> x >> y; 
     points.push_back(make_pair(x,y)); 
    } 
    fout << std::setprecision(5) << std::fixed << find_area() << "\n"; 
    return 0; 
} 

SECOND :

#include <iostream> 
#include <vector> 
#include <stdlib.h> 
#include <iomanip> 
#include <cmath> 
#include <cstdio> 
#define max 1000000 
using namespace std; 

int N; 
vector< pair<double,double> > points; 

double tri_area(pair<double, double> p1, pair<double,double> p2){ 

    return p1.first * p2.second - p2.first * p1.second; 
} 

double find_area(){ 
    double area = 0; 
    for(int i = 0; i < N-1; i++){ 
     area += tri_area(points[i],points[i+1]); 
    } 
    area += tri_area(points[N-1], points[0]); 
    return abs(area/2.); 
} 

int main(){ 
    freopen("aria.in","r",stdin); 
    freopen("aria.out","w",stdout); 
    scanf("%d",&N); 
    double x, y; 
    for(int i = 0; i < N; i++){ 
     scanf("%lf %lf",&x,&y); 
     points.push_back(make_pair(x,y)); 
    } 
    printf("%lf", find_area()); 
    return 0; 
} 
+0

초과 : 당신이 알고 있다면, 당신은 당신의 프로그램에 fstreamFILE*를 혼합하지 않을거야, 당신은 다음과 같이 sync_with_stdio를 호출하여이 동기화를 해제 할 수 있습니다? 두 번째 버전이 실제로 대답이 아닌 정답을주는 것을 확인 했습니까? – user2711915

+0

사이트에서 문제를 제출했으며 평가 보드에서 첫 번째 것보다 두 번째 것보다 느리다 고합니다. 하지만 둘 다 맞습니다 :) –

답변

0

이러한 버전의 주요 차이점은

핀 >> >> X (Y)이고;

는 scanf ("%의 LF의 %의 LF"& X, Y &);

그러나 대 printf이 아니고 프로그램 끝에서 1을 호출했습니다.

차이점은 C++ 스트림이 C 스트림과 동기화되어 속도가 저하된다는 것입니다.

당신에게 시간 제한을 말하고 무엇
std::ios::sync_with_stdio(false);