我的思想是这样的:
要求是全灭了 就赢了。。那最左边如果有亮的 早晚都要解决。
我想 从左到右解决。选择第一个亮的,然后其他反过来。再选择第二个亮的其他反过来。
她俩一人选一次,所以组后执行次数如果是偶数就是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;
}
#include <iostream> #include <vector> using namespace std; int main(){ int n; cin>>n; vector<int>bulbs; int tmp; for(int i=0;i<n;++i){ cin>>tmp; bulbs.push_back(tmp); } int count=0; int position=n-1; while(position){ while(position>0&&bulbs[position]==bulbs[position-1])position--; if(position) { count++; position--; } } if(bulbs[0]==1)count++; if(count%2==1)cout<<"Alice"; else cout<<"Bob"; return 0; }
被7整除那题,用下面的代码可以吗?我还没来得及试。。。就结束了。。。
#include <iostream> #include <stack> #include <vector> using namespace std; int isMulti(vector<int> final){ int i; for( i = 0 ;i <final.size()-1;i++){ if(final[i] >= 7){ final[i+1] += final[i]%7; }else{ final[i+1] += final[i]*10; } } if(final[i] % 7 ==0) return 1; else return 0; } int isvalid(int n, int m){ stack<int>first; stack<int>second; while(n != 0){ first.push(n%10); n/=10; } while(m != 0){ second.push(m%10); m/=10; } vector<int>final; vector<int>secondNum; while(!first.empty()){ final.push_back(first.top()); first.pop(); } while(!second.empty()){ final.push_back(second.top()); second.pop(); } return isMulti(final); } int main(){ int n; cin>>n; vector<int> num; for(int i = 0 ;i < n;i++){ int temp; cin>>temp; num.push_back(temp); } int solution = 0; for(int i = 0 ;i < n; i++){ for(int j = 0 ;j < n; j++){ if(i != j ){ solution += isvalid(num[i],num[j]); } } } cout<<solution<<endl; }
这样就AC了. import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); while(cin.hasNext()){ int n = cin.nextInt(); int[] a = new int[n]; int temp = 0; for(int i=0;i<n;i++){ a[i] = cin.nextInt(); if (a[i]==1) { temp = i; } } if (temp == n-1) { System.out.println("Alice"); }else { System.out.println("Bob"); } } }