1.23 div2 b-字符串处理(string 与 char 字符串

Posted -ifrush

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.23 div2 b-字符串处理(string 与 char 字符串相关的知识,希望对你有一定的参考价值。

B. Game with string
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Two people are playing a game with a string s

, consisting of lowercase latin letters.

On a players turn, he should choose two consecutive equal letters in the string and delete them.

For example, if the string is equal to "xaax" than there is only one possible turn: delete "aa", so the string will become "xx". A player not able to make a turn loses.

Your task is to determine which player will win if both play optimally.
Input

The only line contains the string s
, consisting of lowercase latin letters (1≤|s|≤100000), where |s| means the length of a string s

.
Output

If the first player wins, print "Yes". If the second player wins, print "No".

开始用字符串模拟判断删除的整个过程,结果各种分类讨论,各种出错

而用string里自带的 erase删除字符 瞬间简洁

ps:c++ string的erase删除方法

1. 从位置pos=10处开始删除,直到结尾  str.erase(10);

2.  删除迭代器[first, last)区间的所有字符,返回一个指向被删除的最后一个元素的下一个字符的迭代器. str.erase(str.begin()+10);

string.size() 不能判断空字符串 删除字符前要用len保存字符长度

#include<cstdio>
#include<cstring>
#include<iostream>
#include<string>
using namespace std;
 int main(){
     string s;
     int k=0;
     getline(cin,s);
     int len=s.size();
     for(int i=0;i<len;i++){
         while(i>=0&&s[i]==s[i+1]){
//             printf("%d %d %c %c
",i,i+1,s[i],s[i+1]);
             k++;
             s.erase(s.begin()+i,s.begin()+i+2);
             len-=2;
              if(len<=1)break;
             i--;
            if(i<0)i=0;
//             printf("%d %d %c %c
",i,i+1,s[i],s[i+1]);
         }
         if(len<=1)break;
     }
     if(k%2==0)printf("No");
     else printf("Yes");
     return 0;
 }

 

以上是关于1.23 div2 b-字符串处理(string 与 char 字符串的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces #620 div2 B

JAVA温度补0问题?

1JS的数据类型

div2.B C

#420(div2)C. Mister B and Boring Game

#422(div2)B. Crossword solving