Submission #688444

#TimeUsernameProblemLanguageResultExecution timeMemory
688444alexddPermutation Recovery (info1cup17_permutation)C++17
10 / 100
5 ms7124 KiB
#include<bits/stdc++.h> using namespace std; //ifstream fin("input03.in"); //#define cin fin #define int long long int bucket_size; int update_timer; int n; struct bigInt { vector<int> cif; }; bigInt operator-(bigInt x, bigInt y)///return x-y { bigInt sc; bigInt newx = x; for(int i=0;i<x.cif.size();i++) { if(i<y.cif.size() && x.cif[i] >= y.cif[i]) sc.cif.push_back(x.cif[i] - y.cif[i]); else if(i>=y.cif.size()) sc.cif.push_back(x.cif[i]); else { int j=i+1; while(x.cif[j]==0) x.cif[j++]=9; x.cif[j]--; sc.cif.push_back(10+x.cif[i]-y.cif[i]); } } while(!sc.cif.empty() && sc.cif[sc.cif.size()-1]==0) sc.cif.pop_back(); x = newx; return sc; } bool operator==(bigInt x, bigInt y) { return x.cif == y.cif; } bool operator<=(bigInt x, bigInt y) { if(x.cif.size() < y.cif.size()) return 1; if(x.cif.size() > y.cif.size()) return 0; for(int i=0;i<x.cif.size();i++) { if(x.cif[i]<y.cif[i]) return 1; if(x.cif[i]>y.cif[i]) return 0; } return 1; } bigInt q[70001]; bigInt zer; bigInt unu = {{1}}; void afisare(bigInt x) { for(int i=x.cif.size()-1;i>=0;i--) cout<<x.cif[i]; } struct bucket { vector<int> v; }; bucket gol; bigInt sum[70001]; vector<bucket> buckets; void balance_buckets()///O(n) { vector<int> ramas; for(int i=0;i<buckets.size();i++) for(int j=0;j<buckets[i].v.size();j++) ramas.push_back(buckets[i].v[j]); buckets.clear(); for(int i=0;i<ramas.size();i+=bucket_size) { buckets.push_back(gol); int limit = ramas.size()-1; limit = min(limit, i+bucket_size-1); for(int j=i;j<=limit;j++) { buckets[buckets.size()-1].v.push_back(ramas[j]); // sum[buckets.size()-1] += q[ramas[j]]; } } } void insereaza(int b, int poz, bigInt ramas)///O(marimea bucketului in care inserez) { vector<int> newv; int r=0,lim=q[poz].cif.size(); if(sum[b].cif.size()>lim) lim = sum[b].cif.size(); for(int i=0;i<lim;i++) { if(i<sum[b].cif.size()) r+=sum[b].cif[i]; if(i<q[poz].cif.size()) r+=q[poz].cif[i]; newv.push_back(r%10); r=r/10; } while(r>0) { newv.push_back(r%10); r=r/10; } //sum[b].cif = newv; sum[b].cif.clear(); for(int i=0;i<newv.size();i++) { //cout<<newv[i]<<" "; sum[b].cif.push_back(newv[i]); } //cout<<"\n"; for(int i=0;i<buckets[b].v.size();i++) { if(ramas==zer) { buckets[b].v.insert(buckets[b].v.begin()+i, poz); return; } ramas = ramas - q[buckets[b].v[i]]; } buckets[b].v.insert(buckets[b].v.end(), poz); } int rez[70001]; signed main() { //ios_base::sync_with_stdio(0);cin.tie(0); cin>>n; update_timer = 500; bucket_size = 100; buckets.push_back(gol); bigInt prec, ceva; prec = zer; string s; int procent=0; for(int i=1;i<=n;i++) { cin>>s; for(int j=s.size()-1;j>=0;j--) q[i].cif.push_back(s[j]-'0'); ceva = q[i]; q[i] = q[i] - prec; prec = ceva; bigInt aux = q[i] - unu; int unde = 0; bool bl=0; for(int j=0;j<buckets.size();j++) { unde = j; if(aux <= sum[j]) { bl=1; break; } aux = aux - sum[j]; } insereaza(unde, i, aux); if(i<n && i%update_timer==0) { //balance_buckets(); } } //return 0; int cate=0; for(int i=0;i<buckets.size();i++) { for(int j=0;j<buckets[i].v.size();j++) { cate++; rez[buckets[i].v[j]]=cate; } } for(int i=1;i<=n;i++) cout<<rez[i]<<" "; return 0; }

Compilation message (stderr)

permutation.cpp: In function 'bigInt operator-(bigInt, bigInt)':
permutation.cpp:19:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   19 |     for(int i=0;i<x.cif.size();i++)
      |                 ~^~~~~~~~~~~~~
permutation.cpp:21:13: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   21 |         if(i<y.cif.size() && x.cif[i] >= y.cif[i])
      |            ~^~~~~~~~~~~~~
permutation.cpp:23:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   23 |         else if(i>=y.cif.size())
      |                 ~^~~~~~~~~~~~~~
permutation.cpp: In function 'bool operator<=(bigInt, bigInt)':
permutation.cpp:49:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   49 |     for(int i=0;i<x.cif.size();i++)
      |                 ~^~~~~~~~~~~~~
permutation.cpp: In function 'void balance_buckets()':
permutation.cpp:78:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<bucket>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   78 |     for(int i=0;i<buckets.size();i++)
      |                 ~^~~~~~~~~~~~~~~
permutation.cpp:79:22: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   79 |         for(int j=0;j<buckets[i].v.size();j++)
      |                     ~^~~~~~~~~~~~~~~~~~~~
permutation.cpp:82:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   82 |     for(int i=0;i<ramas.size();i+=bucket_size)
      |                 ~^~~~~~~~~~~~~
permutation.cpp: In function 'void insereaza(long long int, long long int, bigInt)':
permutation.cpp:99:25: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   99 |     if(sum[b].cif.size()>lim)
      |        ~~~~~~~~~~~~~~~~~^~~~
permutation.cpp:103:13: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  103 |         if(i<sum[b].cif.size())
      |            ~^~~~~~~~~~~~~~~~~~
permutation.cpp:105:13: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  105 |         if(i<q[poz].cif.size())
      |            ~^~~~~~~~~~~~~~~~~~
permutation.cpp:117:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  117 |     for(int i=0;i<newv.size();i++)
      |                 ~^~~~~~~~~~~~
permutation.cpp:124:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  124 |     for(int i=0;i<buckets[b].v.size();i++)
      |                 ~^~~~~~~~~~~~~~~~~~~~
permutation.cpp: In function 'int main()':
permutation.cpp:163:22: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<bucket>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  163 |         for(int j=0;j<buckets.size();j++)
      |                     ~^~~~~~~~~~~~~~~
permutation.cpp:162:14: warning: variable 'bl' set but not used [-Wunused-but-set-variable]
  162 |         bool bl=0;
      |              ^~
permutation.cpp:183:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<bucket>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  183 |     for(int i=0;i<buckets.size();i++)
      |                 ~^~~~~~~~~~~~~~~
permutation.cpp:185:22: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  185 |         for(int j=0;j<buckets[i].v.size();j++)
      |                     ~^~~~~~~~~~~~~~~~~~~~
permutation.cpp:150:9: warning: unused variable 'procent' [-Wunused-variable]
  150 |     int procent=0;
      |         ^~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...