题解 | #放置路灯#
放置路灯
http://www.nowcoder.com/questionTerminal/45d20d0e59d94e7d8879f19a5755c177
一遍贪心
#include<iostream> #include<string> #include<vector> #include<unordered_map> #include<algorithm> #include<time.h> #include<cstdlib> using namespace std; int main(){ string s; int n; cin>>n>>s; int ans=0; int i = 0; while(i<s.size()){ if(s[i]=='X'){ i++; } //假设i位置之前不论放不放灯都不会影响到i位置,后面的i+2,i+3,就是为了保证这一点。 else{ ans++;//在这个位置让路灯++,不代表就放在这个位置,只是说有了'.'必定要放一个灯,具体放哪,后面控制i的多少来决定 if(i+1==s.size()){ break;//到了末尾了,灯就放在这,返回。 } if(s[i+1]=='X'){ i = i+2;//后面是'X',灯也放这,i跳到'x'的后面,也就是i+2 } else{ i = i+3;//后面还是'.',灯肯定放后面这个'.'上,所以i,i+1,i+2都不在需要放灯,i直接跳到i+3 } } } cout<<ans<<endl; return 0; }