模拟小记

朱雀 2021-11-14 11:10 576阅读 0赞

【p1098】字符串展开

【p1042】乒乓球

做模拟的lz日渐崩溃;

请放一首“我要一步一步往上爬”

1605606-20190702165725880-1465647917.png

【p1098】字符串展开

这个题的ac经历:50-60-70-80-100;

中间还夹杂了几次忘记关freopen的0;

模拟是魔鬼!

思路到是莫得什么好讲的,就是注意以下几个点:

1.连续的‘-’直接输出

2.‘-’出现在开头或末尾直接输出

3.当‘-’两端的字符分别是数字和字母时,原样输出。

没有然后:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. inline int read() {
  4. int ans=0;
  5. char last=' ',ch=getchar();
  6. while(ch>'9'||ch<'0') last=ch,ch=getchar();
  7. while(ch>='0'&&ch<='9') ans=(ans<<1)+(ans<<3)+ch-'0',ch=getchar();
  8. if(last=='-') ans=-ans;
  9. return ans;
  10. }
  11. int p1,p2,p3;
  12. char a[200];
  13. int main() {
  14. p1=read();
  15. p2=read();
  16. p3=read();
  17. p3--;
  18. scanf("%s",a);
  19. int len=strlen(a);
  20. for(int i=0; i<len; i++) {
  21. if(a[i]=='-') {
  22. if(i==0||i==len-1){
  23. printf("-");
  24. continue;
  25. }
  26. if(a[i+1]=='-'||a[i-1]=='-'){
  27. printf("-");
  28. continue;
  29. }
  30. char before=a[i-1],after=a[i+1];
  31. if(before>=after) {
  32. printf("%c",a[i]);
  33. continue;
  34. }
  35. if(before+1==after) continue;
  36. if((before>='0'&&before<='9'&&(after>'9'||after=='-'))||(after>='0'&&after<='9'&&(before>'9'||before=='-'))) {
  37. printf("%c",a[i]);
  38. continue;
  39. }
  40. if(before>='0'&&before<='9'&&after>='0'&&after<='9') {
  41. if(p1==3) {
  42. int x=after-before;
  43. x--;
  44. x*=p2;
  45. for(int i=1; i<=x; i++)
  46. printf("*");
  47. } else {
  48. if(p3) {
  49. int y=after-before;
  50. y--;
  51. char z=after-1;
  52. int cnt=0;
  53. for(int i=1; i<=y*p2; i++) {
  54. if(cnt==p2) {
  55. cnt=0;
  56. z-=1;
  57. }
  58. printf("%c",z);
  59. cnt++;
  60. }
  61. } else {
  62. int y=after-before;
  63. y--;
  64. char z=before+1;
  65. int cnt=0;
  66. for(int i=1; i<=y*p2; i++) {
  67. if(cnt==p2) {
  68. cnt=0;
  69. z+=1;
  70. }
  71. printf("%c",z);
  72. cnt++;
  73. }
  74. }
  75. }
  76. }
  77. if(before>='a'&&before<='z'&&after>-'a'&&after<='z') {
  78. if(p1==3) {
  79. int x=after-before;
  80. x--;
  81. x*=p2;
  82. for(int i=1; i<=x; i++)
  83. printf("*");
  84. }
  85. if(p1==1) {
  86. if(p3) {
  87. int y=after-before;
  88. y--;
  89. char z=after-1;
  90. int cnt=0;
  91. for(int i=1; i<=y*p2; i++) {
  92. if(cnt==p2) {
  93. cnt=0;z-=1;
  94. }
  95. printf("%c",z);cnt++;
  96. }
  97. } else {
  98. int y=after-before;
  99. y--;
  100. char z=before+1;
  101. int cnt=0;
  102. for(int i=1; i<=y*p2; i++) {
  103. if(cnt==p2) {
  104. cnt=0;z+=1;
  105. }
  106. printf("%c",z);cnt++;
  107. }
  108. }
  109. }
  110. if(p1==2){
  111. if(p3) {
  112. int y=after-before;y--;
  113. char z=after-33;
  114. int cnt=0;
  115. for(int i=1; i<=y*p2; i++) {
  116. if(cnt==p2) {
  117. cnt=0;z-=1;
  118. }
  119. printf("%c",z);cnt++;
  120. }
  121. } else {
  122. int y=after-before; y--;
  123. char z=before-31;
  124. int cnt=0;
  125. for(int i=1; i<=y*p2; i++) {
  126. if(cnt==p2) {
  127. cnt=0;z+=1;
  128. }
  129. printf("%c",z);cnt++;
  130. }
  131. }
  132. }
  133. }
  134. } else printf("%c",a[i]);
  135. }
  136. return 0;
  137. }

【p1042】乒乓球

恭喜lz喜提乒乓球11分制与21分制的差别;

1605606-20190704093130700-1212362261.png

反正这个题讲的不是很清楚;

11分制:

当有一方的分数达到11分并且二者的分差>=2时,就判定得11分的那一方胜出,因此可以输出一次比分。当某一方分数达到11分但是二者分差<2时,继续比赛,直到二者分差>=2;

21分制与11分制的规则大致一样,只不过是将11分改为21分;

然后注意特判E在开头出现的情况:EWWW……,直接输出0:0\n\n0:0;

然后我是单个字符读入的,用了一个bool数组a来记录是W(1华华赢)还是L(0对手赢),然后从前到后扫描,当a[i]=1时,hh++;否则ds++;

然后输出的条件是:华华和对手有一方的分数>=11并且它们分数之差的绝对值>=2,这样就可以一概将楼上比分制度出现的所有情况都覆盖到了;

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. bool a[62511];
  4. int hh,ds;
  5. int main() {
  6. int cnt=0;
  7. char ch;
  8. while(ch!='E') {
  9. ch=getchar();
  10. if(ch=='W') a[++cnt]=1;
  11. if(ch=='L') a[++cnt]=0;
  12. }
  13. if(cnt==0) printf("0:0\n\n0:0");
  14. for(int i=1; i<=cnt; i++) {
  15. if(a[i]) hh++;
  16. else ds++;
  17. if((hh>=11||ds>=11)&&abs(hh-ds)>=2) {
  18. printf("%d:%d\n",hh,ds);
  19. hh=ds=0;
  20. }
  21. if(i==cnt) printf("%d:%d\n",hh,ds);
  22. }
  23. printf("\n");
  24. hh=ds=0;
  25. for(int i=1; i<=cnt; i++) {
  26. if(a[i]) hh++;
  27. else ds++;
  28. if((hh>=21||ds>=21)&&abs(hh-ds)>=2) {
  29. printf("%d:%d\n",hh,ds);
  30. hh=ds=0;
  31. }
  32. if(i==cnt&&i%21!=0) printf("%d:%d",hh,ds);
  33. }
  34. return 0;
  35. }

end-

转载于:https://www.cnblogs.com/zhuier-xquan/p/11121722.html

发表评论

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

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

相关阅读

    相关 小记

        大四开学,这段时间没有来记录自己的学习进度,真是遗憾,今天写代码,发现以前的基础知识都不会,这今天开始,遇到的问题要开始总结了. 前两天收到招聘邮件,待遇不错,

    相关 小记

    python中用numpy包读取文本时可以用np.loadtxt()函数 entity = np.loadtxt(open('C:\\Users\\chemprot_

    相关 数学小记

    近来看到的一个小小的数学问题,简单一记~ 问题 给定任一奇数a,求平方数b,使其与a的和等于另一平方数c 初一看该问题没想到直接的构造方法,首先使用穷举法来看下小范围

    相关 Emacs小记

    要学习Emacs,首先得了解一些组合键的意思。 键盘操作符号的意义: C-x: 同时按住Ctrl和x键 C x: 按住Ctrl后释放,再按下x键 M-x:

    相关 实习小记

    八月八号,一个多么吉利的日子,我开始了我的实习生活。实习公司和学校宿舍也就一个小时车程,不过,个人暂时还没有早起的习惯,所以,选择了住在公司,这样其实也挺好的,因为早上万一堵

    相关 模拟小记

    [【p1098】字符串展开][p1098] [【p1042】乒乓球][p1042] 做模拟的lz日渐崩溃; 请放一首“我要一步一步往上爬” ![1605606-2019

    相关 代码小记

    0. 引子   前一阵子一直在制作一款小[游戏][Link 1],虽说最终的成果并不完美,但也算是花了不少精力,网上批评的声音不少,但更多的则是鼓励,这也让我们颇感欣慰,自省