我的思想是这样的:
要求是全灭了 就赢了。。那最左边如果有亮的 早晚都要解决。
我想 从左到右解决。选择第一个亮的,然后其他反过来。再选择第二个亮的其他反过来。
她俩一人选一次,所以组后执行次数如果是偶数就是bob赢了 如果是奇数就是alice赢了。
为了降低时间复杂度,我考虑:
第一次选择第一个1的灯泡,右侧1全变成0,0全变1,
如果我不改变右侧,那就相当于 选择了第一个1的灯泡之后,,我应该往右找第一个是0的灯泡(这个灯泡如果上一步选择之后 应该变成1,但是我没有改变他)
于是形成一个规律:如果上一次找1的灯泡,这次应该找0的灯泡
如果上一次找0的灯泡,这一次应该找1的灯泡。
这样本来n方的时间复杂度能降为n
我的代码:
#include "iostream" using namespace std; // 获得数字位数 int a[100000]; int main(){ int n; cin>>n; for(int i =0;i<n;i++){ cin>>a[i]; } int res = 0; int k = 1; for(int i =0;i<n;i++){ if(a[i]==k){ res++; if(k==1) k=0; else k=1; } } if(res%2==0){ cout<<"Bob"; }else{ cout<<"Alice"; } return 0; }