[18] Concurs - Triunghiuri

[18] Concurs - Triunghiuri

Postby Mihai » 26 Oct 2011, 23:56

Triunghiuri

Se citesc din fișierul bitcell18.in N numere naturale (1<=N<=1000000) cuprinse între 1 și 100 reprezentând lungimile a N segmente. Câte triunghiuri pot fi formate folosind doar segmente cu lungimile date? Răspunsul se va afișa în bitcell18.out.

Exemplu

bitcell18.in


bitcell18.out:


Explicație: pot fi formate următoarele 4 triunghiuri: (2,4,3), (2,4,3), (2,3,3), (4,3,3).

Perioada de desfășurare:

27 Octombrie - 5 Noiembrie - înscrierea în concurs
6 Noiembrie - desemnarea câștigătorului
0,0p / 0 votes
User avatar
Mihai
Byte
 
Joined: 29 Dec 2009
Status: 25

Re: [18] Concurs - Triunghiuri

Postby cata45 » 27 Oct 2011, 15:00

Daca (spre exemplu) latura a=3 , latura b=2 si latura c=5 se considera ca formeaza un triunghi de arie 0?


L.E. (-- 27 Oct 2011, 15:00 --)

Nu se precizeaza in fisierul de intrare cate segmente se dau?
Si daca lungimile segmentelor sunt mai mici de 100 la exemplu de ce este si 128?
0,0p / 0 votes
The EARTH without ART is just EH.
User avatar
cata45
Byte
 
Joined: 02 Sep 2010
Status: 9

Re: [18] Concurs - Triunghiuri

Postby nomemory » 27 Oct 2011, 18:07

O solutie: aici . Programul e compilat pe Linux 32 (nu am avut Windows la indemana) .

Am adaugat eu manual dimensiunea listei de numere, astfel fisierul bitcell18.in ar trebui sa arate asa:


Codul nu am avut pe ce sa-l testez, daca nu functioneaza corect, se pot adauga cateva teste noi (mai ales pentru numere mari) .

Sursa am trimis-o ca mesaj privat lui Mihai .
1p / 1 votes
User avatar
nomemory
Bit
 
Joined: 24 Aug 2011
Location: Bucuresti
Status: 2

Re: [18] Concurs - Triunghiuri

Postby Mihai » 27 Oct 2011, 20:03

Precizări:

  • în fişier nu se va găsi N ci doar o listă a celor N numere; altfel spus, N se determină ca fiind numărul de numere din fişier
  • pentru exemplul dat, numărul 128 nu avea într-adevăr ce să caute acolo - trebuia să fie 28; am modificat în enunţ testul
  • nu există triunghiuri cu unghiuri nule
0,0p / 0 votes
User avatar
Mihai
Byte
 
Joined: 29 Dec 2009
Status: 25

Re: [18] Concurs - Triunghiuri

Postby Payne » 29 Oct 2011, 12:18

Salut, am facut si eu o aplicatie, dar as dori o ultima verificare inainte sa o postez.
Am urmatorul fisier de intrare:
  1. 2 3 2 2 3 2 3 99 99 100 99 100 99


Daca esti amabil Mihai, mi-ai putea da rezultatul correct?
1p / 1 votes
Suit up!

Image
User avatar
Payne
Byte
 
Joined: 04 Jan 2010
Location: 0x7C00
Status: 17

Re: [18] Concurs - Triunghiuri

Postby new_luca » 29 Oct 2011, 15:01

Payne, e cumva rezultatul 160 ?

Am facut si eu ceva si imi da 160, doar ca nu stiu cum s-ar comporta programul 1 milion de mumere :)) , probabil as mai imbatrani cu un an pana sa aflu rezultatul.

Cine imi spune si mie cum sa incep cu algoritmii , ca sunt || ..m-am chinuit sa invat Backtracking dar tot nu am inteles, Programarea dinamica....nu prea le inteleg, nu pot sa implementez deloc ...tot ce fac e Brute Force :D doar cum ma duce pe mine capul cum s-ar spune, imi fac proprii algoritmi care suck mereu ca eficienta.
3p / 1 votes
Image
User avatar
new_luca
Byte
 
Joined: 03 Jul 2011
Location: Gaesti
Status: 12

Re: [18] Concurs - Triunghiuri

Postby Payne » 30 Oct 2011, 12:06

Eu am reusit sa rezolv problema cu numarul foarte mare de laturi, dar imi dificulteaza calcularea numarului de triunghiuri posibile.


L.E. (-- 29 Oct 2011, 15:59 --)

Dupa multe batai de cap am reusit :P.

Varianta mea aici.


L.E. (-- 30 Oct 2011, 11:06 --)

Am gasit un mic bug in programul anterior. Pun aici versiunea a 2a.
0,0p / 0 votes
Suit up!

Image
User avatar
Payne
Byte
 
Joined: 04 Jan 2010
Location: 0x7C00
Status: 17

Re: [18] Concurs - Triunghiuri

Postby morpheus » 30 Oct 2011, 17:30

new_luca wrote:m-am chinuit sa invat Backtracking dar tot nu am inteles, Programarea dinamica....nu prea le inteleg, nu pot sa implementez deloc

Deschide topic-uri separate si intreaba acolo, ca de aia avem forum.
0,0p / 0 votes
User avatar
morpheus
Word
 
Joined: 30 Dec 2009
Location: Bucharest, Romania
Status: 54.84

Re: [18] Concurs - Triunghiuri

Postby new_luca » 31 Oct 2011, 23:02

Varianta mea care pe masura datele de intrare cresc ca numar, timpul de executie creste exponential iar pentru un milion de numere....

Download
0,0p / 0 votes
Image
User avatar
new_luca
Byte
 
Joined: 03 Jul 2011
Location: Gaesti
Status: 12

Re: [18] Concurs - Triunghiuri

Postby Mihai » 05 Nov 2011, 18:10

Payne: Îmi cer scuze dacă este (mult) prea târziu dar am fost foarte ocupat. Pe testul de mai sus, răspunsul era într-adevăr 160 (așa cum a observat și Luca).
0,0p / 0 votes
User avatar
Mihai
Byte
 
Joined: 29 Dec 2009
Status: 25

Re: [18] Concurs - Triunghiuri

Postby Payne » 05 Nov 2011, 23:25

No problem, am facut un brute force pentru rezultatul acela.
0,0p / 0 votes
Suit up!

Image
User avatar
Payne
Byte
 
Joined: 04 Jan 2010
Location: 0x7C00
Status: 17

Re: [18] Concurs - Triunghiuri

Postby Mihai » 07 Nov 2011, 17:33

Payne, trimite-mi te rog ultima sursă a ta pentru a putea desemna câştigătorul.
0,0p / 0 votes
User avatar
Mihai
Byte
 
Joined: 29 Dec 2009
Status: 25

Re: [18] Concurs - Triunghiuri

Postby Payne » 07 Nov 2011, 17:41

Ti-am trimis-o dupa a pune versiunea a 2a. Deci e ultima sursa.
0,0p / 0 votes
Suit up!

Image
User avatar
Payne
Byte
 
Joined: 04 Jan 2010
Location: 0x7C00
Status: 17

Re: [18] Concurs - Triunghiuri

Postby new_luca » 07 Nov 2011, 19:12

Vreau sa imi explice si mie cineva cum se rezolva problema eficient.



Nu citi acest offtopic daca nu cumva vrei sa pierzi timpul si/sau sa ai "nervi" ...sau orice alte simptome neplacute.
Offtopic
0,0p / 0 votes
Image
User avatar
new_luca
Byte
 
Joined: 03 Jul 2011
Location: Gaesti
Status: 12

Re: [18] Concurs - Triunghiuri

Postby cata45 » 07 Nov 2011, 20:16

In primul rand trebuie sa stochezi in memorie cele N segmente. (1<=N<=1000000). Aici este cheia problemei. In enunt se specifica faptul ca lungimea unui segment nu este mai mare de 100. Deci in loc sa ai un vector cu N componente ai unul cu 100 de componente si in a[i] numeri de cate ori apare segmentul de lungime i. Parcurgand acest vector determini cate triunghiuri poti forma. (Trei segmente de lungime a,b, respectiv c sunt laturile unui triunghi daca: a+b>c; b+c>a; a+c>b); Trebuie sa gasesti o formula de determinare a numarului de triunghiuri stiind ca ai x laturi de lungime a, y laturi de lungime b si z laturi de lungime c.

Banuiesc ca nelamurirea ta (si timpul de executie al programului tau) provine de la faptul ca aveai un vector de 1000000 pe care faceai operatiile.
Sper ca ai inteles. Din cate stiu trebuie postate sursele participante. Te poti uita si pe ele. %%-
0,0p / 0 votes
The EARTH without ART is just EH.
User avatar
cata45
Byte
 
Joined: 02 Sep 2010
Status: 9

Re: [18] Concurs - Triunghiuri

Postby Mihai » 08 Nov 2011, 21:16

Am primit 3 surse:

nomemory:
  1. #include <algorithm>
  2. #include <cstdio>
  3. #include <vector>
  4.  
  5. #define MAX_NUM_ELEM 1000000
  6. #define FILE_IN "bitcell18.in"
  7. #define FILE_OUT "bitcell18.out"
  8.  
  9. #define INVALID_READ 1
  10. #define INVALID_WRITE 2
  11. #define SUCCESS 0
  12.  
  13. using namespace std;
  14.  
  15. // Read input file, stores results in numbers vector
  16. bool read_input(const char * file_in_name, vector<short> &numbers)
  17. {
  18.     int size = 0;
  19.     short int tmp = 0;
  20.     FILE *file_in = fopen(file_in_name, "r");
  21.    
  22.     if (NULL == file_in) {
  23.         return (false);
  24.     }
  25.    
  26.     fscanf(file_in, "%d", &size);
  27.     numbers.reserve(size);
  28.    
  29.     for(int i = 0; i < size ; ++i) {
  30.         fscanf(file_in, "%hd", &tmp);
  31.         numbers.push_back(tmp);
  32.     }
  33.    
  34.     fclose(file_in);
  35.    
  36.     return true;
  37. }
  38.  
  39. // Takes number vector write solution
  40. bool write_output(const char * file_out_name, vector<short> numbers)
  41. {
  42.     short sum = 0, diff = 0;
  43.     FILE *file_out = fopen(file_out_name, "w");
  44.     vector<short>::iterator up;
  45.     int triangles = 0;
  46.    
  47.     if(NULL == file_out) {
  48.         return (false);
  49.     }
  50.    
  51.     if (numbers.size() < 3) {
  52.         fprintf(file_out, "%hd", triangles);
  53.         fclose(file_out);
  54.         return (true);
  55.     }
  56.    
  57.     sort(numbers.begin(), numbers.end());
  58.    
  59.     for(vector<short>::iterator i = numbers.begin(); i != numbers.end(); ++i) {
  60.         for(vector<short>::iterator j = i + 1; j != numbers.end(); ++j) {
  61.             sum = (*i) + (*j);
  62.             diff = (*j) - (*i);
  63.             up = lower_bound(i, numbers.end(), sum);
  64.             #ifdef DEBUG
  65.             // Define DEBUG to additionaly print possible triangles
  66.             for(vector<short>::iterator k = j + 1; k != up; k++) {
  67.                 printf("%hd %hd %hd\n", *i, *j, *k);
  68.             }
  69.             #endif
  70.             triangles += int(up - j - 1);
  71.         }
  72.     }
  73.    
  74.     fprintf(file_out, "%hd", triangles);
  75.     fclose(file_out);
  76.    
  77.     return (true);
  78. }
  79.  
  80. int main(int argc, char * argv[])
  81. {
  82.     vector<short> numbers;
  83.    
  84.     if (!read_input(FILE_IN, numbers)) {
  85.         fprintf(stderr, "Cannot read file: %s .\n", FILE_IN);
  86.         return (INVALID_READ);
  87.     }
  88.    
  89.     if (!write_output(FILE_OUT, numbers)) {
  90.         fprintf(stderr, "Cannot write solution to file: %s .\n", FILE_OUT);
  91.         return (INVALID_WRITE);
  92.     }
  93.    
  94.     return (SUCCESS);
  95. }


payne:
  1.  
  2. #include <iostream>
  3. #include <fstream>
  4. #include <cstring>
  5. #include <cstdlib>
  6. using namespace std;
  7. long long count = 0LL;
  8. bool ValidTriangle(const char &a,const char &b,const char &c){
  9.     if((a+b) > c && (a+c) > b && (b+c) > a)
  10.         return true;
  11.     return false;
  12. }
  13. bool isNumeric(const string &s){
  14.     bool isnumeric = true;
  15.     for(unsigned int x=0;x<s.length();x++){
  16.         if(s[x] < 48 || s[x] > 57)
  17.         {
  18.             isnumeric = false;
  19.             break;
  20.         }
  21.     }
  22.     return isnumeric;
  23. }
  24. void CalcTriangleOne(const char &a,const long long &ac){
  25.     if(ac > 2LL)
  26.     {
  27.         count += ((ac-1LL)*(ac-2LL)*ac)/6LL;
  28.     }
  29. }
  30. void CalcTriangleTwo(const char &a,const long long &ac, const char &b, const long long &bc){
  31.     if(ac+bc > 2LL && ac > 0LL && bc > 0LL){
  32.         if(ValidTriangle(a,a,b))
  33.         {
  34.             count += (ac*(ac-1LL))/2LL*bc;
  35.         }
  36.         if(ValidTriangle(b,b,a))
  37.         {
  38.             count += (bc*(bc-1LL))/2LL*ac;
  39.         }
  40.     }
  41. }
  42. void CalcTriangleThree(const char &a, const long long &ac, const char &b, const long long &bc,const char &c,const long long &cc){
  43.     if(ac > 0LL && bc > 0LL && cc > 0LL && (ac+bc+cc) > 2LL){
  44.         if(ValidTriangle(a,b,c)){
  45.             count += ac*bc*cc;
  46.         }
  47.     }
  48. }
  49. int main()
  50. {
  51.     fstream in("bitcell18.in",fstream::in);
  52.     fstream out("bitcell18.out",fstream::out);
  53.     int numbers[101];
  54.     fill(numbers,numbers+101,0);
  55.     if(in.is_open()){
  56.         if(out.is_open() && out.good())
  57.         {
  58.             string number;
  59.             int i = 0;
  60.             while(in.good()){
  61.                 in >> number;
  62.                 if(isNumeric(number)){
  63.                     int val = atoi(number.c_str());
  64.                     if(val > 0 && val <= 100){
  65.                         numbers[val]++;
  66.                         i++;
  67.                         if (i >= 1000000)
  68.                             break;
  69.                     }
  70.                 }
  71.             }
  72.             if(i >= 3){
  73.                 for(unsigned int x = 0;x<101-2;x++)
  74.                 {
  75.                     for(unsigned int y = x+1;y<101-1;y++)
  76.                     {
  77.                         for(unsigned int z = y+1;z<101;z++)
  78.                         {
  79.                             CalcTriangleThree(x,numbers[x],y,numbers[y],z,numbers[z]);
  80.                         }
  81.                     }
  82.                 }
  83.                 for(unsigned int x =0;x<101-1;x++)
  84.                 {
  85.                     for(unsigned int y=x+1;y<101;y++)
  86.                     {
  87.                         CalcTriangleTwo(x,numbers[x],y,numbers[y]);
  88.                     }
  89.                 }
  90.                 for(unsigned int x=0;x<101;x++)
  91.                 {
  92.                     CalcTriangleOne(x,numbers[x]);
  93.                 }
  94.             }
  95.             out << count;
  96.             out.close();
  97.         }
  98.         else
  99.             cout << "Nu se poate crea sau deschide fisierul bitcell18.out";
  100.         in.close();
  101.     }
  102.     else
  103.         cout << "Nu exista sau nu se poate citi fisierul bitcell18.in";
  104.     return 0;
  105. }


new_luca:
  1. #include <stdio.h>
  2.  
  3. int triunghi(int a,int b,int c)
  4. {
  5.     if(a+b > c && a+c > b && b+c > a)
  6.     {
  7.         return 1;
  8.     }
  9.     return 0;
  10. }
  11.  
  12. int main(void)
  13. {
  14.     unsigned short v[1000000] = {0}, a, b, c;
  15.     int n, suma = 0;
  16.    
  17.     freopen("bitcell18.in", "r", stdin);
  18.     freopen("bitcell18.out", "w", stdout);
  19.                                                     //          2 4 3 3 28
  20.     for(n = 0; scanf("%d", &v[n]) != EOF; n++);     //4 triunghiuri: (2,4,3), (2,4,3), (2,3,3), (4,3,3).
  21.    
  22.     for(a = 0;a < n-2;a++)
  23.     {
  24.         for(b = a+1;b < n-1;b++)
  25.         {
  26.             for(c = b+1;c < n;c++)
  27.             {
  28.                 suma += triunghi(v[a],v[b],v[c]);
  29.             }
  30.         }
  31.     }
  32.    
  33.     printf("%d", suma);
  34.    
  35.     return 0;
  36. }


Sfat pentru viitor: când puteţi implementa brut (şi aveţi timp destul la dispoziţie), este o idee foarte bună să o faceţi. Astfel, puteţi verifica mai apoi dacă soluţia mai eficientă este corectă (folosiţi brutul şi un generator de teste scris tot de voi, desigur) şi în caz că apar probleme vă puteţi da seama mai repede unde anume.

Acestea fiind spuse, câştigătorul concursului este new_luca: deşi algoritmul este ineficient, fiind implementarea brută, se descurcă bine pe mai multe teste decât celelalte soluţii.
Luca, te aşteptăm cu propunerea pentru noul concurs!
0,0p / 0 votes
User avatar
Mihai
Byte
 
Joined: 29 Dec 2009
Status: 25

Re: [18] Concurs - Triunghiuri

Postby new_luca » 08 Nov 2011, 22:25

Final de concurs total neasteptat, cel putin pentru mine.

Mihai te rog frumos, cu toate ca stiu ca esti foarte ocupat si nu prea ai timp sa propui tot tu o problema, sau altcineva daca aveti vreo problema interesanta nu ezitati, apreciez timpul pe care il dedicati.

Sunt curios ce au celelalte coduri de de dau erori pe anumite teste, asta banuiesc ca s-a intamplat.

M-am uitat peste ele si nu prea pot sa le citesc in totalitate si sa le si inteleg, oricum am incercat inca de dinaintea finalizarii concursului sa folosesc un vector cu 100 de pozitii si sa tin minte pe fiecare pozitie numarul aparitiilor segmentului de acea lungime cum mi-a sugerat cata45, problema pe care o gasesc este formula de determinare a triunghiurilor posibile apoi.

Eu m-am gandit sa generez toate combinatiie de cele 100 posibile lungimi de segmente, luate cate 3 si apoi sa inmultesc numarul aparitiilor acelor 3 segmente intre ele daca ele exista si pot forma un triunghi ca mai apoi sa adun triunghiurile. Cred ca imi lipseste ceva, si nu imi dau seama ce cu toate ca poate raspunsul este in fata mea, in codurile lui Payne sau nomemory.

Este logica mea gresita oare, pentru ca rezultatele codului sunt eronate, nu cu mult, dar e o eroare constanta care tot apare, am incercat multe teste ^:)^

  1.  
  2.  #include <stdio.h>
  3.  
  4. int triunghi(int a,int b,int c)
  5. {
  6.     if(a+b > c && a+c > b && b+c > a)              
  7.     {                                              
  8.         return 1;
  9.     }
  10.     return 0;
  11. }
  12.  
  13. int main(void)
  14. {
  15.     unsigned short v[101] = {0}, a, b, c, i;        
  16.     int n, x, suma = 0;                        
  17.  
  18.     freopen("bitcell18.in", "r", stdin);
  19.     freopen("bitcell18.out", "w", stdout);
  20.    
  21.     for(n = 0; scanf("%d", &x) != EOF; n++)v[x]++;  //scanez cele n numere din fisierul de intrare si le stochez in V
  22.    
  23.     for(a = 1;a < 99;a++)
  24.     {
  25.         for(b = a+1;b < 100;b++)
  26.         {
  27.             for(c = b+1;c < 101;c++)
  28.             {
  29.                 suma += v[a]*v[b]*v[c]*triunghi(a,b,c);     //Ce anume uit, sau e gresit?
  30.             }                                              
  31.         }
  32.     }
  33.     printf("%d", suma);
  34.     return 0;
  35. }
  36.  
  37.  
0,0p / 0 votes
Image
User avatar
new_luca
Byte
 
Joined: 03 Jul 2011
Location: Gaesti
Status: 12

Re: [18] Concurs - Triunghiuri

Postby Payne » 08 Nov 2011, 22:43

Acea inmultire calculeaza triunghiurile posibile cu toate 3 numerele, dar lipseste de exemplu posibilitatile folosind doar doua dintre ele si folosind doar una. Vezi functiile CalcTriangleTwo si CalcTriangleOne.
0,0p / 0 votes
Suit up!

Image
User avatar
Payne
Byte
 
Joined: 04 Jan 2010
Location: 0x7C00
Status: 17

Re: [18] Concurs - Triunghiuri

Postby Teal » 09 Nov 2011, 13:12

De ce va complicati unii din voi?

Trebuia sa generati toate combinatiile posibile de N luate cate 3 si sa testati folosind teorema ca suma a oricare doua laturi ale unui triunghi sunt mai mare decat a treia.

Am zis sa va fac si eu un cod ca sa intelegeti.
  1. #include <fstream>
  2. #include <vector>
  3. using namespace std;
  4. int iNumberOfTriangles = 0, iSolution[3], iNumberOfSegments, iSegment;
  5. vector<int> vSegments;
  6. bool isTriangle(int a, int b, int c) {
  7.         if(a + b > c && a + c > b && b + c > a) return true;
  8.         return false;
  9. }
  10. void generateTriangles(int iPos = 0) {
  11.         if(iPos == 3)
  12.                 iNumberOfTriangles += isTriangle(vSegments[iSolution[0]], vSegments[iSolution[1]], vSegments[iSolution[2]]) ? 1 : 0;
  13.         else
  14.                 for(int index = (iPos == 0) ? 0 : iSolution[iPos - 1] + 1; index < iNumberOfSegments; index++) {
  15.                         iSolution[iPos] = index;
  16.                         generateTriangles(iPos + 1);
  17.                 }
  18. }
  19. int main() {
  20.         fstream file("bitcell.in", ios::in);
  21.         while(file>>iSegment) vSegments.push_back(iSegment);
  22.         iNumberOfSegments = vSegments.size();
  23.         file.close();
  24.         generateTriangles();
  25.         file.open("bitcell.out", ios::out);
  26.         file<<iNumberOfTriangles;
  27.         file.close();
  28.         return 0;
  29. }

  • Citesti toate valorile segmentelor intr-un vector.
  • Generezi toate posibilitatile prin backtracking.
  • Testezi fiecare solutie generate sa vezi daca poate crea un triunghi.
  • Numeri solutiile corecte.
  • Si gata.
0,0p / 0 votes
User avatar
Teal
Bit
 
Joined: 26 Jan 2010
Location: Suceava
Status: 0

Re: [18] Concurs - Triunghiuri

Postby new_luca » 09 Nov 2011, 14:09

Multumesc Payne, acum am inteles ce uitam, si am inteles si formulele, combinatorica asta...

Ultimul tau executabil pentru fisierul cu 1 milion de numere da alt rezultat fata de ce da codul meu de mai jos, dar pentru teste mai mici da acelasi rezultat, asa ca nu stiu exact la care dintre noi este buba in cod, cel brut sta sigur milenii deci nu pot verifica :D.

@Teal, eu nu stiu Backtracking si nici C++, dar codul tau l-am compilat si nu prea scrie nimic in fisierul de iesire si nici nu stiu cum sa il modific sa scrie, dar sunt curios cum functioneaza solutia ta.

Codul si executabilul scris de mine dupa ce cata45 si Payne mi-au aratat calea cea buna, sper sa nu fie gresita :
Download

  1. #include <stdio.h>
  2.  
  3. short triunghi(short a,short b,short c)
  4. {
  5.     if(a+b > c && a+c > b && b+c > a)                
  6.     {                                              
  7.         return 1;
  8.     }
  9.     return 0;
  10. }
  11.  
  12. int main(void)
  13. {
  14.     unsigned short v[101] = {0}, a, b, c, x;
  15.     unsigned int n;                        
  16.     unsigned long long suma = 0;
  17.                                                    
  18.     freopen("bitcell18.in", "r", stdin);
  19.     freopen("bitcell18.out", "w", stdout);
  20.    
  21.     for(n = 0; scanf("%d", &x) != EOF; n++)v[x]++;
  22.    
  23. /*3*/for(a = 1;a < 99;a++)                                          
  24.     {
  25.         for(b = a+1;b < 100;b++)
  26.         {
  27.             for(c = b+1;c < 101;c++)
  28.             {
  29.                 if(triunghi(a,b,c))suma += v[a]*v[b]*v[c];
  30.             }                                              
  31.         }
  32.     }
  33. /*2*/for(a = 1;a < 100;a++)                                        
  34.     {  
  35.         for(b = a+1;b < 101;b++)
  36.         {
  37.             if(v[a]+v[b] > 2)
  38.             {
  39.                 if(triunghi(a,a,b))suma += ((v[a]-1)*v[a])/2*v[b];  
  40.                 if(triunghi(b,b,a))suma += ((v[b]-1)*v[b])/2*v[a];
  41.             }
  42.         }
  43.     }
  44. /*1*/for(a = 1;a < 101;a++)                                      
  45.     {
  46.         if(v[a] > 2)suma += ((v[a]-1)*(v[a]-2)*v[a])/6;
  47.     }
  48.    
  49.     printf("%llu", suma);
  50.     return 0;
  51. }
  52.  
0,0p / 0 votes
Image
User avatar
new_luca
Byte
 
Joined: 03 Jul 2011
Location: Gaesti
Status: 12

Next

Return to Concursuri de programare desktop

Who is online

Users browsing this forum: No registered users and 0 guests

cron