第十一章 模拟 6 AcWing 1526. 洗牌机

青旅半醒 2024-03-31 12:31 124阅读 0赞

第十一章 模拟 6 AcWing 1526. 洗牌机

原题链接

AcWing 1526. 洗牌机

算法标签

模拟 置换

思路

依题意模拟 具体思路见代码

代码

  1. #pragma GCC optimize(2)
  2. #pragma GCC optimize(3)
  3. #include<bits/stdc++.h>
  4. #define int long long
  5. #define xx first
  6. #define yy second
  7. #define ump unordered_map
  8. #define us unordered_set
  9. #define pq priority_queue
  10. #define rep(i, a, b) for(int i=a;i<b;++i)
  11. #define Rep(i, a, b) for(int i=a;i>=b;--i)
  12. using namespace std;
  13. typedef pair<int, int> PII;
  14. const int N=10005, inf=0x3f3f3f3f3f3f3f3f, mod=1e9+7;
  15. const double Exp=1e-8;
  16. int p[59], w[59], q[59];
  17. //int t, n, m, cnt, ans;
  18. inline int rd(){
  19. int s=0,w=1;
  20. char ch=getchar();
  21. while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
  22. while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
  23. return s*w;
  24. }
  25. void put(int x) {
  26. if(x<0) putchar('-'),x=-x;
  27. if(x>=10) put(x/10);
  28. putchar(x%10^48);
  29. }
  30. void print(int x){
  31. if(x<=13){
  32. printf("S%lld", x);
  33. }else if(x<=26){
  34. printf("H%lld", x-13);
  35. }else if(x<=39){
  36. printf("C%lld", x-26);
  37. }else if(x<=52){
  38. printf("D%lld", x-39);
  39. }else{
  40. printf("J%lld", x-52);
  41. }
  42. }
  43. signed main(){
  44. ios::sync_with_stdio(false);
  45. cin.tie(0);
  46. cout.tie(0);
  47. int k=rd();
  48. rep(i, 1, 55){
  49. q[i]=rd();
  50. // 第i张牌放置第i个位置
  51. p[i]=i;
  52. }
  53. while(k--){
  54. // 存储当前序列p至w中 防止洗牌过程中被覆盖
  55. memcpy(w, p, sizeof w);
  56. rep(i, 1, 55){
  57. // 第i张牌(w[i])放置q[i]位置(p[q[i]])
  58. p[q[i]]=w[i];
  59. }
  60. }
  61. rep(i, 1, 55){
  62. print(p[i]);
  63. if(i!=55){
  64. printf(" ");
  65. }
  66. }
  67. return 0;
  68. }

参考文献

AcWing 1526. 洗牌机(PAT甲级辅导课)y总视频讲解

原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,124人围观)

还没有评论,来说两句吧...

相关阅读