Guest User

Untitled

a guest
Jan 22nd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.41 KB | None | 0 0
  1. #include <vector>
  2. #include <cstdio>
  3. #include <queue>
  4. #include <algorithm>
  5. #include <cstring>
  6. using namespace std;
  7.  
  8. vector <int> eu;
  9. vector < pair<int,int> > v[200010];
  10. char rj[200010];
  11. bool bio[200010];
  12. bool bio2[200010];
  13. int k;
  14.  
  15. void bfs(int pos){
  16. bool jesam[200010];
  17. memset(jesam,0,sizeof(jesam));
  18. queue <int> q;
  19. q.push(pos);
  20. jesam[pos]=true;
  21. for(int j=0;j<200003;++j)
  22. if(v[j].size()%2==1){
  23. v[j].push_back(make_pair(200005,k));
  24. v[200005].push_back(make_pair(j,k));
  25. ++k;
  26. }
  27. while(!q.empty()){
  28. int x=q.front();
  29. q.pop();
  30. for(int i=0;i<v[x].size();++i)
  31. if(!jesam[v[x][i].first]){
  32. jesam[v[x][i].first]=true;
  33. q.push(v[x][i].first);
  34. }
  35. }
  36. }
  37.  
  38. void euler(int pos){
  39. bio2[pos]=true;
  40. while(!v[pos].empty()){
  41. int x=v[pos][v[pos].size()-1].first;
  42. int y=v[pos][v[pos].size()-1].second;
  43. if(bio[y]==true){
  44. v[pos].pop_back();
  45. continue;
  46. }
  47. bio[y]=true;
  48. euler(x);
  49. eu.push_back(y);
  50. }
  51. }
  52.  
  53. int n;
  54. int ax,bx,mx,ay,by,my;
  55. long long x1,y1;
  56. int t;
  57. int main(void){
  58. scanf("%d",&t);
  59. for(int p=0;p<t;++p){
  60. memset(bio,0,sizeof(bio));
  61. memset(bio2,0,sizeof(bio2));
  62. k=0;
  63. scanf("%d",&n);
  64. scanf("%lld%lld%d%d%d%d%d%d",&x1,&y1,&ax,&bx,&mx,&ay,&by,&my);
  65. v[x1].push_back(make_pair(y1+mx,k));
  66. v[y1+mx].push_back(make_pair(x1,k));
  67. ++k;
  68. for(int i=2;i<=n;++i){
  69. x1=(x1*ax+bx)%mx;
  70. y1=(y1*ay+by)%my;
  71. v[x1].push_back(make_pair(y1+mx,k));
  72. v[y1+mx].push_back(make_pair(x1,k));
  73. ++k;
  74. }
  75. for(int i=0;i<200003;++i)
  76. if(!v[i].empty() && !bio2[i]){
  77. eu.clear();
  78. bfs(i);
  79. euler(i);
  80. bool x=0;
  81. for(int j=0;j<eu.size();++j){
  82. if(x) rj[eu[j]]='A';
  83. else rj[eu[j]]='B';
  84. x=!x;
  85. }
  86. }
  87. for(int i=0;i<n;++i)
  88. printf("%c",rj[i]);
  89. printf("\n");
  90. }
  91. return 0;}
Add Comment
Please, Sign In to add comment