Tam giác đều nội tiếp


Submit solution

Points: 1
Time limit: 2.0s
Memory limit: 98M

Author:
Problem types
Allowed languages
Ada, Assembly, Awk, C, C++, C11, CLANG, CLANGX, Classical, COBOL, Coffee, CSC, D lang, DART, F95, FORTH, Fortrn, GAS32, GO, Haskell, Itercal, Java, kotlin, LEAN, LISP, LUA, MONOVB, Nasm, OCAML, Pascal, Perl, php, PIKE, prolog, Pypy, Python, Ruby 2, RUST, Scala, SCM, SED, SWIFT, TCL, TUR, V8JS, VB, ZIG

Cho N điểm trên một vòng tròn. Bạn phải viết một chương trình để xác định có bao nhiêu tam giác đều có thể được xây dựng bằng cách nối các điểm đó với nhau.

Hình dưới minh hoạ cho một ví dụ: (a) cho thấy một tập hợp các điểm, được xác định bởi độ dài của các cung tròn; Và (b) cho thấy hai hình tam giác đều có thể được xây dựng với những điểm này.

enter image description here

Đầu vào

Đầu vào có chứa một số trường hợp thử nghiệm và kết thúc bằng dấu kết thúc file (EOF). Dòng đầu tiên của một test case chứa một số nguyên \(N (3 ≤ N ≤ 10^5 )\), thể hiện số điểm cho trước. Dòng thứ hai chứa N số nguyên \(X_i (1 ≤ X i ≤ 10^3 )\) cho \(1 ≤ i ≤ N\) , biểu diễn độ dài của cung tròn giữa hai điểm liên tiếp trong hình tròn:

Với \(1 ≤ i ≤ ( N - 1)\): \(X_i\) đại diện cho chiều dài của cung giữa các điểm \(i\) và \(i + 1\);

Với \(i=N\): \(X_N\) đại diện cho chiều dài của cung giữa các điểm \(N\) và \(1\).

Đầu ra

Đối với mỗi trường hợp thử nghiệm, chương trình của bạn phải xuất ra một dòng đơn, chứa một số nguyên, số tam giác đều đều có thể được xây dựng bằng cách sử dụng các điểm cho trước như các đỉnh.

VÍ DỤ

INPUT

8

4 2 4 2 2 6 2 2

6

3 4 2 1 5 3

OUTPUT

2

1


Comments


  • 0
    DuyAnhhh  commented on April 14, 2020, 10:45 a.m.

    Ai cho em tham khảo code bài này với ạ


    • 1
      TICHPX  commented on April 15, 2020, 2:17 a.m.

      Code tham khảo

      #include<bits/stdc++.h>
      using namespace std;
      int main()
      {
          int n;
          while(scanf("%d",&n)!=EOF)
          {
              int x[n+5]={0};
              map<int,int>M;
              for(int i=1;i<=n;i++) {scanf("%d",&x[i]);x[i]+=x[i-1];M[x[i]]++;}
              for(int i=1;i<=n;i++) {M[x[i]+x[n]]++;}
              if(x[n]%3) printf("0\n");
              else
              {
                  int d=x[n]/3;
                  long long res=0;
                  for(int i=0;x[i]<d;i++) if(M.find(x[i]+d)!=M.end()&&M.find(x[i]+2*d)!=M.end()) res++;
                  printf("%lld\n",res);
              }
          }
      
      }

      • 0
        DuyAnhhh  commented on April 15, 2020, 2:21 a.m.

        Em cảm ơn ạ


  • 0
    DuyAnhhh  commented on March 20, 2020, 2:52 a.m.

    Đề bài khó hiểu quá :((