Submission #703960

#TimeUsernameProblemLanguageResultExecution timeMemory
703960victor_gaoNaan (JOI19_naan)C++17
29 / 100
35 ms9920 KiB
//#pragma GCC optimize("Ofast,unroll-loops,O3") //#pragma GCC optimize("avx,avx2,sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,fma,tune=native") #include<bits/stdc++.h> //#include<bits/extc++.h> //#pragma pack(1) #define fast ios::sync_with_stdio(0); cin.tie(0); #define ll long long #define pii pair<ll,ll> #define x first #define y second #define N 2015 using namespace std; //using namespace __gnu_pbds; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); //typedef tree<int, null_type,less_equal<int>, rb_tree_tag,tree_order_statistics_node_update> order_multiset; //typedef tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> order_set; struct mixed{ ll a,b,c; // a+b/c mixed(int x,int y,int z):a(x),b(y),c(z){} void reset(){ while (b<0){ a--; b+=c; } while (b>=c){ a++; b-=c; } if (b>0&&c>0){ ll g=__gcd(b,c); b/=g; c/=g; } } void out(){ cout<<a*c+b<<" "<<c<<'\n'; } }; int n,l,total[N],arr[N][N]; bool vis[N]; vector<mixed>cut[N]; bool bigger(mixed x,mixed y){ if (x.a!=y.a) return x.a>y.a; return x.b*y.c>=x.c*y.b; } signed main(){ fast cin>>n>>l; for (int i=1;i<=n;i++){ for (int j=1;j<=l;j++){ int val; cin>>val; arr[i][j]=val*n; total[i]+=arr[i][j]; } total[i]/=n; } for (int i=1;i<=n;i++){ int now=0; for (int j=1;j<=l;j++){ int last=arr[i][j]; while (now+last>=total[i]){ last-=(total[i]-now); now=0; cut[i].push_back(mixed(j-1,arr[i][j]-last,arr[i][j])); } now+=last; } assert(cut[i].size()==n); for (int j=0;j<cut[i].size();j++) cut[i][j].reset(); // cout<<i<<" : \n"; // for (auto j:cut[i]) // j.out(); // cout<<'\n'; } vector<mixed>ans; vector<int>order; for (int i=1;i<=n;i++){ mixed mn=mixed(1e9,0,1); int use=0; for (int j=1;j<=n;j++){ if (!vis[j]&&bigger(mn,cut[j][i-1])){ mn=cut[j][i-1]; use=j; } } vis[use]=1; order.push_back(use); ans.push_back(mn); } ans.pop_back(); for (auto i:ans) i.out(); for (auto j:order) cout<<j<<" "; cout<<'\n'; }

Compilation message (stderr)

In file included from /usr/include/c++/10/cassert:44,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:33,
                 from naan.cpp:3:
naan.cpp: In function 'int main()':
naan.cpp:61:29: warning: comparison of integer expressions of different signedness: 'std::vector<mixed>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   61 |         assert(cut[i].size()==n);
      |                ~~~~~~~~~~~~~^~~
naan.cpp:62:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<mixed>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   62 |         for (int j=0;j<cut[i].size();j++)
      |                      ~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...