codeforce 1A-1C

17832 단어
1A, 1B는 쉬워요. 코드를 직접 붙였어요.
1C는 계산 기하학에 대한 약간의 지식을 가지고 몇 가지 공식을 비교적 정확하게 비교해야 하기 때문에 나는 모두 잊어버렸다. 큰 소를 쓰는 코드를 참조한 적이 있다.
비교적 주의해야 할 것은 그 fgcd가 부동점형의 최대 공약수를 구하려면 전체적인 ep=1e-4, 즉 0.0001을 설정하는 것이 가장 좋다는 것이다.
fq(a, 0) 또는 fq(b, 0)의 차이가 ep보다 적으면 서로 같다.
 
1B
 1 #include
 2 #include<string>
 3 #include
 4 #include
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     int n;
10     string str;
11     cin>>n;
12     for(int i=0;i)
13     {
14         int cnt1=0,cnt2=0,cnt3=0,cnt4=0;
15         cin>>str;
16         int flag=8888;
17         for(int j=0;j)
18         {
19             if(cnt2==0&&(str[j]<'0'||str[j]>'9'))
20             {
21                 cnt1++;
22                 continue;
23             }
24             if(str[j]>='0'&&str[j]<='9'&&cnt3==0)
25             {
26                 cnt2++;
27                 continue;
28             }
29             if(cnt2>0&&(str[j]<'0'||str[j]>'9'))
30             {
31                 cnt3++;
32                 continue;
33             }
34             if(cnt3>0&&str[j]>='0'&&str[j]<='9')
35             {
36                 cnt4++;
37                 continue;
38             }
39         }
40 
41         if(cnt3==0)
42         {
43             int c=0,r=0;
44             for(int i=0;i)
45             {
46                 c+=pow((float)26,(float)cnt1-i-1)*(str[i]-'A'+1);
47             }
48             for(int i=0;i)
49             {
50                 r+=pow((float)10,(float)cnt2-i-1)*(str[i+cnt1]-'0');
51             }
52 
53             cout<<"R"<"C"<endl;
54         }
55         else
56         {
57             int r=0,c=0;
58             string sstr;
59             for(int i=0;i)
60             {
61                 r+=pow((float)10,(float)cnt2-1-i)*(str[1+i]-'0');
62             }
63             for(int i=0;i)
64             {
65                 c+=pow((float)10,(float)cnt4-1-i)*(str[1+cnt2+1+i]-'0');
66             }
67             while(c>0)
68             {
69                 int m=c%26;
70                 if(m!=0) 
71                 {
72                     sstr+=(char)(m+'A'-1);
73                     c/=26;
74                 }
75                 else
76                 {
77                     sstr+='Z';
78                     c/=26;
79                     c--;
80                 }
81 
82             }
83             reverse(&sstr[0],&sstr[sstr.length()]);
84             cout<endl;
85         }
86     }
87 
88     return 0;
89 }

 
1C
#include
#include
#include
using namespace std;

#define feq(a,b) (fabs((a)-(b))<1E-6)


double Dis(double x1,double y1,double x2,double y2)
{
    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}

double Area(double a,double b,double c)
{
    double q=(a+b+c)/2;
    return sqrt(q*(q-a)*(q-b)*(q-c));
}

double fgcd(double a,double b)
{
    if(feq(a,0))
        return b;
    if(feq(b,0))
        return a;
    return fgcd(b,fmod(a,b));
}
int main()
{
    double x0,x1,x2,y0,y1,y2;
    cin>>x0>>y0>>x1>>y1>>x2>>y2;
    double a=Dis(x0,y0,x1,y1);
    double b=Dis(x0,y0,x2,y2);
    double c=Dis(x1,y1,x2,y2);
    double r=a*b*c/Area(a,b,c)/4;
    double A=acos((b*b+c*c-a*a)/2/b/c);
    double B=acos((a*a+c*c-b*b)/2/a/c);
    double C=acos((a*a+b*b-c*c)/2/a/b);
    //double A=2*asin(a/2/r);
    //double B=2*asin(b/2/r);
    //double C=2*asin(c/2/r);

    double e=acos(-1.0)/fgcd(A,fgcd(B,C));
    
    double angle=2*acos(-1.0)/e;
    printf("%.8f
",sin(angle)*r*r*e/2); return 0; }

 
전재 대상:https://www.cnblogs.com/cavehubiao/p/3411048.html

좋은 웹페이지 즐겨찾기