找规律,如果1+2可以表示3以内所有数,1+2+4表示7以内所有数,1+2+4+8表示15以内所有数,,,规律:a[n]<=sum[1~n-1]+1时,可以表示sum[1~n]内所有数
AC代码
#include <bits/stdc++.h> using namespace std; int a[105]; typedef long long LL; int n, m; LL sum = 0; int who(int i) { for(int j=i; j<n; j++) { if(a[j]>sum+1) return j-1; else if(a[j]==sum+1) return j; } return n-1; } int main() { cin>>m>>n; for(int i=0; i<n; i++) { scanf("%d", &a[i]); } sort(a, a+n); int ans= 0; for(int i=0; i<n; i++) { int j = who(i); i = j; sum += a[j]; ans++; if(sum >= m) break; } while(sum < m) { sum += a[n-1]; ans++; } printf("%d ", ans); return 0; }
第二题跟01位置无关,直接统计个数
#include <bits/stdc++.h> using namespace std; int main() { int n, a = 0, b = 0; cin>>n; char s[200004]; scanf("%s", s); int l = strlen(s); for(int i=0; i<l; i++) { if(s[i]-'0' == 0) a++; else b++; } cout<<abs(a-b)<<endl; return 0; }