Submission #247366

#TimeUsernameProblemLanguageResultExecution timeMemory
247366SomeoneUnknownWine Tasting (FXCUP4_wine)C++17
0 / 100
5 ms1020 KiB
#include "bartender.h" #include <bits/stdc++.h> using namespace std; struct bthirteen{ vector<int> digits; void carry_over(){ for(int i = 0; i < digits.size(); i++){ digits.push_back(0); digits[i+1] += digits[i]/13; digits[i] %= 13; //printf("%d ", digits.back()); if(digits.back() == 0) digits.pop_back(); } //printf("\n"); } bthirteen(){ } bthirteen(int sval){ digits.push_back(sval); carry_over(); } }; bthirteen* ad13(bthirteen *a, bthirteen *b){ bthirteen *res = new bthirteen(); int i; for(i = 0; i < min(a->digits.size(), b->digits.size()); ++i){ res->digits.push_back(a->digits[i]+b->digits[i]); } for(; i < a->digits.size(); ++i){ res->digits.push_back(a->digits[i]); } for(; i < b->digits.size(); ++i){ res->digits.push_back(b->digits[i]); } res->carry_over(); return res; } bthirteen* mp13(bthirteen *a, bthirteen *b){ bthirteen *res = new bthirteen(0); for(int i = 0; i < a->digits.size(); ++i){ for(int j = 0; j < b->digits.size(); ++j){ if(i+j >= res->digits.size()){ res->digits.push_back(0); } res->digits[i+j] += a->digits[i] * b->digits[j]; } } res->carry_over(); while(res->digits.back() == 0){ res->digits.pop_back(); } return res; } bthirteen* sbthirteen(bthirteen *a, bthirteen *b){ //will throw an error if this results in a negative number! bthirteen *res = new bthirteen(); int i; for(i = 0; i < min(a->digits.size(), b->digits.size()); ++i){ res->digits.push_back(a->digits[i]-b->digits[i]); } for(; i < a->digits.size(); ++i){ res->digits.push_back(a->digits[i]); } for(int i = 0; i < res->digits.size(); ++i){ while(res->digits[i] < 0){ res->digits[i] += 13; res->digits[i+1] -= 1; } } return res; }//*/ vector<int> BlendWines(int K, vector<int> R){ int N = R.size(); vector<bthirteen*> factorials; factorials.push_back(new bthirteen(1)); for(int i = 1; i <= N; i++){ factorials.push_back(mp13(factorials.back(), new bthirteen(i))); } bool unused[N+1]; for(int i = 0; i < N+1; ++i) unused[i] = true; bthirteen *pno = new bthirteen(0); for(int i = 0; i < N; ++i){ int afterunused = 0; unused[R[i]] = false; for(int j = 1; j < R[i]; ++j){ if(unused[j]) ++afterunused; } bthirteen *psubt = mp13(factorials[N-1-i], new bthirteen(afterunused)); /*printf("psubt: "); for(int i = 0; i < psubt->digits.size(); ++i){ printf("%d ", psubt->digits[i]); } printf("\n");//*/ pno = ad13(pno, psubt); /*printf("Calculating: "); for(int i = 0; i < pno->digits.size(); ++i){ printf("%d ", pno->digits[i]); } printf("\n");//*/ } vector<int> res; for(int i = 0; i < N; i++){ if(i > pno->digits.size()){ res.push_back(1); }else{ res.push_back(pno->digits[i]+1); } } /*for(int i = 0; i < pno->digits.size(); ++i){ printf("%d ", pno->digits[i]); } printf("\n"); for(int i = 0; i < res.size(); ++i){ printf("%d ", res[i]); } printf("\n"); //printf("Hello world.\n");//*/ return res; }
#include "taster.h" #include <bits/stdc++.h> using namespace std; struct b13{ vector<int> digits; void carry_over(){ for(int i = 0; i < digits.size(); i++){ digits.push_back(0); digits[i+1] += digits[i]/13; digits[i] %= 13; //printf("%d ", digits.back()); if(digits.back() == 0) digits.pop_back(); } //printf("\n"); } b13(){ } b13(int sval){ digits.push_back(sval); carry_over(); } }; b13* ad13(b13 *a, b13 *b){ b13 *res = new b13(); int i; for(i = 0; i < min(a->digits.size(), b->digits.size()); ++i){ res->digits.push_back(a->digits[i]+b->digits[i]); } for(; i < a->digits.size(); ++i){ res->digits.push_back(a->digits[i]); } for(; i < b->digits.size(); ++i){ res->digits.push_back(b->digits[i]); } res->carry_over(); return res; } b13* mp13(b13 *a, b13 *b){ b13 *res = new b13(0); for(int i = 0; i < a->digits.size(); ++i){ for(int j = 0; j < b->digits.size(); ++j){ if(i+j >= res->digits.size()){ res->digits.push_back(0); } res->digits[i+j] += a->digits[i] * b->digits[j]; } } res->carry_over(); while(res->digits.back() == 0){ res->digits.pop_back(); } return res; } b13* sb13(b13 *a, b13 *b){ //will throw an error if this results in a negative number! /*printf("sb in: "); for(int i = 0; i < min(5, (int)a->digits.size()); ++i){ printf("%d ", a->digits[i]); } printf("- "); for(int i = 0; i < min(5, (int)b->digits.size()); ++i){ printf("%d ", b->digits[i]); }//*/ b13 *res = new b13(); int i; for(i = 0; i < min(a->digits.size(), b->digits.size()); ++i){ res->digits.push_back(a->digits[i]-b->digits[i]); } for(; i < a->digits.size(); ++i){ res->digits.push_back(a->digits[i]); } for(int i = 0; i < res->digits.size(); ++i){ while(res->digits[i] < 0){ res->digits[i] += 13; res->digits[i+1] -= 1; } } return res; } bool agthanb(b13 *a, b13 *b){ while(a->digits.back() == 0){ a->digits.pop_back(); } while(b->digits.back() == 0){ b->digits.pop_back(); } //printf("%d %d\n", a->digits.size(), b->digits.size()); if(a->digits.size() > b->digits.size()){ return true; } if(a->digits.size() < b->digits.size()){ return false; } for(int i = a->digits.size()-1; i >= 0; --i){ if(a->digits[i] > b->digits[i]){ return true; } if(a->digits[i] < b->digits[i]){ return false; } } return false; } vector<int> SortWines(int K, vector<int> A) { int N = A.size(); vector<b13*> factorials; factorials.push_back(new b13(1)); for(int i = 1; i <= N; i++){ factorials.push_back(mp13(factorials.back(), new b13(i))); } vector<int> res; b13 *pno = new b13(); for(int i = 0; i < N; i++){ pno->digits.push_back(A[i]-1); //printf("%d", A[i]-1); } vector<int> r; bool used[N+1]; for(int i = 0; i <= N; ++i) used[i] = false; for(int i = 0; i < N; i++){ int curval = 1; while(used[curval]) ++curval; //printf("pno digits: %d\n", pno->digits.size()); while(!agthanb(factorials[N-1-i], pno)){ //printf("pno: %d. factorial: %d\n", pno->digits.size(), factorials[N-1-i]->digits.size()); pno = sb13(pno, factorials[N-1-i]); ++curval; //printf("increasing curval at %d\n", i); while(used[curval]) ++curval; } r.push_back(curval); used[curval] = true; } //Compare(1, 2); return r; }

Compilation message (stderr)

bartender.cpp: In member function 'void bthirteen::carry_over()':
bartender.cpp:9:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i = 0; i < digits.size(); i++){
                        ~~^~~~~~~~~~~~~~~
bartender.cpp: In function 'bthirteen* ad13(bthirteen*, bthirteen*)':
bartender.cpp:32:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(i = 0; i < min(a->digits.size(), b->digits.size()); ++i){
                ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bartender.cpp:35:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(; i < a->digits.size(); ++i){
           ~~^~~~~~~~~~~~~~~~~~
bartender.cpp:38:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(; i < b->digits.size(); ++i){
           ~~^~~~~~~~~~~~~~~~~~
bartender.cpp: In function 'bthirteen* mp13(bthirteen*, bthirteen*)':
bartender.cpp:47:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i < a->digits.size(); ++i){
                    ~~^~~~~~~~~~~~~~~~~~
bartender.cpp:48:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int j = 0; j < b->digits.size(); ++j){
                        ~~^~~~~~~~~~~~~~~~~~
bartender.cpp:49:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if(i+j >= res->digits.size()){
                ~~~~^~~~~~~~~~~~~~~~~~~~~
bartender.cpp: In function 'bthirteen* sbthirteen(bthirteen*, bthirteen*)':
bartender.cpp:65:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(i = 0; i < min(a->digits.size(), b->digits.size()); ++i){
                ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bartender.cpp:68:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(; i < a->digits.size(); ++i){
           ~~^~~~~~~~~~~~~~~~~~
bartender.cpp:71:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i < res->digits.size(); ++i){
                    ~~^~~~~~~~~~~~~~~~~~~~
bartender.cpp: In function 'std::vector<int> BlendWines(int, std::vector<int>)':
bartender.cpp:111:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         if(i > pno->digits.size()){
            ~~^~~~~~~~~~~~~~~~~~~~

taster.cpp: In member function 'void b13::carry_over()':
taster.cpp:9:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int i = 0; i < digits.size(); i++){
                        ~~^~~~~~~~~~~~~~~
taster.cpp: In function 'b13* ad13(b13*, b13*)':
taster.cpp:32:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(i = 0; i < min(a->digits.size(), b->digits.size()); ++i){
                ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
taster.cpp:35:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(; i < a->digits.size(); ++i){
           ~~^~~~~~~~~~~~~~~~~~
taster.cpp:38:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(; i < b->digits.size(); ++i){
           ~~^~~~~~~~~~~~~~~~~~
taster.cpp: In function 'b13* mp13(b13*, b13*)':
taster.cpp:47:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i < a->digits.size(); ++i){
                    ~~^~~~~~~~~~~~~~~~~~
taster.cpp:48:26: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int j = 0; j < b->digits.size(); ++j){
                        ~~^~~~~~~~~~~~~~~~~~
taster.cpp:49:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
             if(i+j >= res->digits.size()){
                ~~~~^~~~~~~~~~~~~~~~~~~~~
taster.cpp: In function 'b13* sb13(b13*, b13*)':
taster.cpp:73:18: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(i = 0; i < min(a->digits.size(), b->digits.size()); ++i){
                ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
taster.cpp:76:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(; i < a->digits.size(); ++i){
           ~~^~~~~~~~~~~~~~~~~~
taster.cpp:79:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(int i = 0; i < res->digits.size(); ++i){
                    ~~^~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...