给定一个数组metrix,数组中只包含1和0,且数组中的1都不相邻,输入一个数n,问能否在将数组中n个0替代换成1后不破坏1都不相邻的条件。
例1 metrix=[1,0,0,0,1],n=1输出true
例2 metrix=[1,0,0,0,1],n=2输出false
输入一个数m(1≤m≤100000)表示metrix的长度
第二行m个数 0或1 表示改位置数组中的元素是0还是1
第三行输入一个数n
输出true或false
5 1 0 0 0 1 1
true
////自我感觉简洁 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan=new Scanner(System.in); while(scan.hasNext()){ int n=scan.nextInt(); int[] data=new int[n+2]; data[0]=0; data[n+1]=0; for(int i=1;i<n;i++) data[i]=scan.nextInt(); int k=scan.nextInt(); get(data,k); } } public static void get(int[]data,int k){ int count=0; for(int i=1;i<data.length-2;i++){ if(data[i-1]==0&&data[i]==0&&data[i+1]==0){ count++; data[i]=1; } } if (count >= k) { System.out.println("true"); } else { System.out.println("false"); } } }
#include <cstdio> int metrix[100000]; int main() { int m, n; while (~scanf("%d", &m)) { for (int i = 0; i < m; ++i) scanf("%d", &metrix[i]); scanf("%d", &n); int count = 0; for (int i = 0; i < m; ++i) { if (metrix[i] == 1) continue; if ((i == 0 || metrix[i -1] == 0) && (i == m - 1 || metrix[i + 1] == 0)) { count++; i++; } } count >= n ? printf("true\n"): printf("false\n"); } }贪心
#include<bits/stdc++.h> using namespace std; int main() { int m,n;cin>>m; vector<int> v(m); for(int i=0;i<m;i++) cin>>v[i]; cin>>n; for(int i=1;i<m-1;i++) { if(v[i-1]==0&&v[i]==0&&v[i+1]==0) { v[i]=1;n--; } } if(n>0) cout<<"false"<<endl; else cout<<"true"<<endl; }
#include<iostream> #include<algorithm> using namespace std; int main() { int n,x,sum=0,m; int arr[100001]; int k=0; cin>>n; for(int i=0;i<n;i++) { cin>>x; if(x==0) { arr[k]++; } else { k++; } } sort(arr,arr+k); for(int i=0;i<=k;i++) { if(arr[i]>=3) { sum+=(arr[i]-1)/2; } } cin>>m; if(m<=sum) { cout<<"true"<<endl; } else { cout<<"false"<<endl; } return 0; }
#include <iostream> using namespace std; int main() { int m = 0; cin >> m; int *matrix = (int *)malloc(m * sizeof(int)); for(int i = 0; i < m; i++) cin >> *(matrix + i); int result = 0, count = 0; for(int i = 0; i < m; i++) { if (*(matrix + i)) { result += (int(count - 1) / 2); count = 0; } else { count += 1; if (i == 0) count += 1; if (i == m - 1) { count += 1; result += (int(count - 1) / 2); } } } int n = 0; cin >> n; if (n <= result) cout << "true" << endl; else cout << "false" << endl; return 0; }
m = int(input()) metrix = list(map(int, input().split())) count = 0 result = 0 for i,n in enumerate(metrix): if n == 0: count += 1 if i == 0: count += 1 if i == len(metrix) - 1: count += 1 result += int((count - 1) / 2) else: result += int((count - 1) / 2) count = 0 n = int(input()) if n <= result: print('true') else: print('false')一样的逻辑,c++的能过,python3的确数组越界???什么鬼,况且直接遍历列表怎么可能越界。。。(删除边界判断依然对,说明两端都是1,出题还是不严谨啊)