fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using ll = long long int;
  4. #define inf 1000000000000000LL
  5. #define mod 1000000007LL
  6. #define FOR(i,a,b) for(int i = a; i < b; i++)
  7.  
  8. void solve() {
  9. ll n; string s;
  10. cin >> n >> s;
  11. vector <ll> la(n), lc(n);
  12. FOR(i,0,n) cin >> la[i]; FOR(i,0,n) cin >> lc[i];
  13. vector <ll> prefix(n, inf);
  14. if (lc[0] != la[0] && s[0] == '1'){
  15. cout << "No" << "\n";
  16. return;
  17. }
  18. else{
  19. la[0] = lc[0];
  20. s[0] = '1';
  21. prefix[0] = lc[0];
  22. }
  23. for (int i = 1; i < n; i++){
  24. if (lc[i] < lc[i-1]){
  25. cout << "No" << "\n";
  26. return;
  27. }
  28. if (lc[i] != lc[i-1]){
  29. prefix[i] = lc[i];
  30. }
  31. }
  32. for (int i = n-1; i >= 1; i--){
  33. if (prefix[i] != inf && s[i] == '1'){
  34. if (prefix[i-1] != inf && prefix[i-1] != prefix[i] - la[i]){
  35. cout << "No" << "\n";
  36. return;
  37. }
  38. prefix[i-1] = prefix[i] - la[i];
  39. }
  40. }
  41. // cout << "hi";
  42. ll sum = 0;
  43. // FOR(i,0,n){
  44. // cout << prefix[i] << " ";
  45. // }
  46. // cout << "\n";
  47. for (int i = 0; i < n; i++){
  48. sum += la[i];
  49. if (prefix[i] != inf && s[i] == '1' && sum != prefix[i]){
  50. cout << "No" << "\n";
  51. return;
  52. }
  53. if (prefix[i] != inf && s[i] == '0'){
  54. la[i] = prefix[i] - sum;
  55. }
  56. if (prefix[i] == inf && s[i] == '0'){
  57. la[i] = -1000000000000LL;
  58. }
  59. if (s[i] == '0') sum += la[i];
  60. // cout << sum << " ";
  61. if (sum > lc[i]){
  62. // cout << "hi" << " " << sum << " " << lc[i] << " ";
  63. cout << "No" << "\n";
  64. return;
  65. }
  66. }
  67. cout << "Yes" << "\n";
  68. for (int i = 0; i< n; i++){
  69. cout << la[i] << " ";
  70. }
  71. cout << "\n";
  72. }
  73.  
  74. int main() {
  75. // ios::sync_with_stdio(false);
  76. // cin.tie(nullptr);
  77.  
  78. ll t = 1;
  79. cin >> t;
  80. while (t--) {
  81. solve();
  82. }
  83.  
  84. return 0;
  85. }
Runtime error #stdin #stdout #stderr 0.01s 5220KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc