BestCoder Round #84
生活随笔
收集整理的這篇文章主要介紹了
BestCoder Round #84
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第一題:Aaronson
#include<iostream> #include<cstdio> #include<cstring> #include<queue> #include<math.h> using namespace std; typedef long long LL; int pow(int a,int n){int ans = 1;while(n){if(n&1) ans = ans*a;a = a*a;n>>=1;}return ans; } int main() {int tcase;scanf("%d",&tcase);while(tcase--){int n,m;scanf("%d%d",&n,&m);int k = n;int ans = 0,cnt = 0;while(n){cnt++;if(n%2==1) ans++;n/=2;}if(cnt<=m+1) printf("%d\n",ans);else {int cnt = 0;int t = pow(2,m);//printf("%d\n",k);while(k&&t){//printf("%d %d\n",k,t);cnt+=k/t;k = k - k/t*t;t/=2;}printf("%d\n",cnt);}}return 0; }第二題:Bellovin
解題思路:利用nlogn求LIS的方法即可,每次用二分找到的ai的位置,就是bi的值(因為保證字典序最小)
#include<iostream> #include<cstdio> #include<cstring> using namespace std;const int maxn = 100005; int n,a[maxn],d[maxn],ans[maxn];int binsearch(int l,int r,int key) {int mid;while(l <= r){mid = (l + r) >> 1;if(d[mid] == key) return mid;else if(d[mid] < key) l = mid + 1;else r = mid - 1;}return l; }int main() {int t;scanf("%d",&t);while(t--){scanf("%d",&n);for(int i = 1; i <= n; i++)scanf("%d",&a[i]);int len = 0;for(int i = 1; i <= n; i++){int tmp = binsearch(1,len,a[i]);ans[i] = tmp;d[tmp] = a[i];if(tmp > len) len = tmp;}for(int i = 1; i < n; i++)printf("%d ",ans[i]);printf("%d\n",ans[n]);}return 0; }
第四題: Dertouzos
解題思路:我們先分解d的因子,假設最大的為p,那么我們就需要找到一個最大的素數x,使得x*p<=d,否則求出的數最大的因子不可能是d,而是x*p,我們以n=20,d=8為例,最大的因子p=4,那么我們找到的最大素數只能是2,所以得出的結果是1。在尋找最大素數時,可以先打表,再用二分去求解。
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的BestCoder Round #84的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Activiti工作流之事件监听详解-A
- 下一篇: 一种SPA(单页面应用)架构