Combothermal

CF1195D

Jul 17th, 2019
315
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.36 KB | None | 0 0
  1. #pragma GCC optimize ("O3")
  2. #pragma GCC target ("sse4")
  3.  
  4. #include <bits/stdc++.h>
  5. #include <ext/pb_ds/tree_policy.hpp>
  6. #include <ext/pb_ds/assoc_container.hpp>
  7.  
  8. using namespace std;
  9. using namespace __gnu_pbds;
  10.  
  11. typedef long long ll;
  12. typedef long double ld;
  13. typedef complex<ld> cd;
  14.  
  15. typedef pair<int, int> pi;
  16. typedef pair<ll,ll> pl;
  17. typedef pair<ld,ld> pd;
  18.  
  19. typedef vector<int> vi;
  20. typedef vector<ld> vd;
  21. typedef vector<ll> vl;
  22. typedef vector<pi> vpi;
  23. typedef vector<pl> vpl;
  24. typedef vector<cd> vcd;
  25.  
  26. template <class T> using Tree = tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update>;
  27.  
  28. #define FOR(i, a, b) for (int i=a; i<(b); i++)
  29. #define F0R(i, a) for (int i=0; i<(a); i++)
  30. #define FORd(i,a,b) for (int i = (b)-1; i >= a; i--)
  31. #define F0Rd(i,a) for (int i = (a)-1; i >= 0; i--)
  32.  
  33. #define sz(x) (int)(x).size()
  34. #define mp make_pair
  35. #define pb push_back
  36. #define f first
  37. #define s second
  38. #define lb lower_bound
  39. #define ub upper_bound
  40. #define all(x) x.begin(), x.end()
  41. #define shandom_ruffle random_shuffle
  42.  
  43. const int MOD = 998244353;
  44. const ll INF = 1e18;
  45. const int MX = 100001; //check the limits, dummy
  46.  
  47. ll getVal(ll X, int other, bool first) {
  48. ll ans = 0;
  49. ll nxtVal = 1;
  50. while (X > 0) {
  51. if (first && other > 0) {
  52. nxtVal *= 10; nxtVal %= MOD;
  53. other--;
  54. }
  55. ll dig = X % 10; X /= 10;
  56. ans += dig * nxtVal; ans = ans % MOD;
  57. nxtVal *= 10; nxtVal %= MOD;
  58. if (!first && other > 0) {
  59. nxtVal *= 10; nxtVal %= MOD;
  60. other--;
  61. }
  62. }
  63.  
  64. return ans;
  65. }
  66.  
  67. int main() {
  68. ios_base::sync_with_stdio(0); cin.tie(0);
  69.  
  70. int N; cin >> N;
  71. ll data[N]; F0R(i, N) cin >> data[i];
  72.  
  73. ll countAt[12]; F0R(i, 12) countAt[i] = 0;
  74.  
  75. F0R(i, N) {
  76. ll cur = data[i];
  77. int curCount = 0;
  78. while (cur > 0) {
  79. cur /= 10;
  80. curCount++;
  81. }
  82. countAt[curCount]++;
  83. }
  84.  
  85. ll ans = 0;
  86. F0R(i, N) {
  87. F0R(j, 12) {
  88. ll val = getVal(data[i], j, true);
  89. val += getVal(data[i], j, false); val %= MOD;
  90. val = val * countAt[j]; val = val % MOD;
  91. ans += val; ans = ans % MOD;
  92. }
  93. }
  94.  
  95. cout << ans << endl;
  96.  
  97. return 0;
  98. }
  99.  
  100. // read the question correctly (ll vs int)
  101. // template by bqi343
Advertisement
Add Comment
Please, Sign In to add comment