BestCoder Round #84 <LIS 2进制 思维>
来源:互联网 发布:淘宝和田玉是真的吗 编辑:程序博客网 时间:2024/04/30 09:32
Aaronson
Accepts: 607
Submissions: 1869
Time Limit: 4000/2000 MS (Java/Others)
Memory Limit: 131072/131072 K (Java/Others)
Aaronson
Accepts: 607
Submissions: 1869
Time Limit: 4000/2000 MS (Java/Others)
Memory Limit: 131072/131072 K (Java/Others)
问题描述
给出一个不定方程x0+2x1+4x2+...+2mxm=n, 找出一组解(x0,x1,x2,...,xm), 使得i=0∑mxi最小, 并且每个xi (0≤i≤m)都是非负的.
输入描述
输入包含多组数据, 第一行包含一个整数T (1≤T≤105)表示测试数据组数. 对于每组数据:第一行包含两个整数n和m (0≤n,m≤109).
输出描述
对于每组数据, 输出i=0∑mxi的最小值.
输入样例
101 23 25 210 210 310 413 520 411 1112 3
输出样例
1223223232
思路:
尽量取大的---
代码:
#include<cstdio>int shu[33];void ppp(){ shu[0]=1; for (int i=1;i<32;i++) shu[i]=shu[i-1]*2;}int main(){ ppp(); int t;scanf("%d",&t); while (t--) { int n,m; scanf("%d%d",&n,&m); if (m>31) m=31; int s=0; for (int i=m;i>=0;i--) { if (n>=shu[i]) { s+=n/shu[i]; n-=n/shu[i]*shu[i]; } } printf("%d\n",s); } return 0;}
Bellovin
Accepts: 428
Submissions: 1685
Time Limit: 6000/3000 MS (Java/Others)
Memory Limit: 131072/131072 K (Java/Others)
Bellovin
Accepts: 428
Submissions: 1685
Time Limit: 6000/3000 MS (Java/Others)
Memory Limit: 131072/131072 K (Java/Others)
问题描述
Peter有一个序列a1,a2,...,an. 定义F(a1,a2,...,an)=(f1,f2,...,fn), 其中fi是以ai结尾的最长上升子序列的长度.Peter想要找到另一个序列b1,b2,...,bn使得F(a1,a2,...,an)和F(b1,b2,...,bn)相同. 对于所有可行的正整数序列, Peter想要那个字典序最小的序列.序列a1,a2,...,an比b1,b2,...,bn字典序小, 当且仅当存在一个正整数i (1≤i≤n)满足对于所有的k (1≤k<i)都有ak=bk并且ai<bi.
输入描述
输入包含多组数据, 第一行包含一个整数T表示测试数据组数. 对于每组数据:第一行包含一个整数n (1≤n≤100000)表示序列的长度. 第二行包含n个整数a1,a2,...,an (1≤ai≤109).
输出描述
对于每组数据, 输出n个整数b1,b2,...,bn (1≤bi≤109)表示那个字典序最小的序列.
输入样例
311055 4 3 2 131 3 5
输出样例
11 1 1 1 11 2 3
运用LIS---求法,求出以每一位结尾的最长链长度---
每个的长度的排序是最优小字典序--
代码:
#include<cstdio>#include<cstring>#define MA 100100int t,n,ge;int kp[MA];int shu[MA];int chu[MA];int zhao(int xx){ int l=0,r=ge-1,mid,ans=0; while (r>=l) { mid=(l+r)/2; if (kp[mid]>=xx) { ans=mid; r=mid-1; } else l=mid+1; } return ans;}int main(){ scanf("%d",&t); while (t--) { scanf("%d",&n);ge=0; for (int i=0;i<n;i++) { scanf("%d",&shu[i]); if (ge==0) { chu[i]=1; kp[ge++]=shu[i]; } else { if (shu[i]>kp[ge-1]) { chu[i]=ge+1; kp[ge]=shu[i]; ge++; } else { chu[i]=zhao(shu[i]); // if (chu[i]!=-1) // { kp[chu[i]]=shu[i]; chu[i]++; /* } else { chu[i]=1; }*/ } } } for (int i=0;i<n-1;i++) printf("%d ",chu[i]); printf("%d\n",chu[n-1]); } return 0;}
Dertouzos
Accepts: 76
Submissions: 1357
Time Limit: 7000/3500 MS (Java/Others)
Memory Limit: 131072/131072 K (Java/Others)
Dertouzos
Accepts: 76
Submissions: 1357
Time Limit: 7000/3500 MS (Java/Others)
Memory Limit: 131072/131072 K (Java/Others)
问题描述
正整数x称为n的positive proper divisor, 当且仅当x∣n并且1≤x<n. 例如, 1, 2, 和3是6的positive proper divisor, 但是6不是.Peter给你两个正整数n和d. 他想要知道有多少小于n的整数, 满足他们的最大positive proper divisor恰好是d.
输入描述
输入包含多组数据, 第一行包含一个整数T (1≤T≤106)表示测试数据组数. 对于每组数据:第一行包含两个整数n和d (2≤n,d≤109).
输出描述
对于每组数据, 输出一个整数.
输入样例
910 210 310 410 510 610 710 810 9100 13
输出样例
121000004
BC官方解析:
随便推导下, 令y=xd, 如果d是y的maximum positive proper divisor, 显然要求x是y的最小质因子. 令mp(n)表示n的最小质因子, 那么就有x≤mp(d), 同时有y<n, 那么x≤⌊dn−1⌋. 于是就是计算有多少个素数x满足x≤min{mp(d),⌊dn−1⌋}.
当d比较大的时候, ⌊dn−1⌋比较小, 暴力枚举x即可. 当d比较小的时候, 可以直接预处理出答案. 阈值设置到106∼107都可以过.
代码:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define LL long longint kp,shu[350000],ge[350000];void da(){ kp=0; memset(shu,0,sizeof(shu)); memset(ge,0,sizeof(ge)); int i,j; for (i=2;i<32000;i++) { if (shu[i]==0) { ge[kp++]=i; for (j=i*i;j<32000;j+=i) shu[j]=1; } }}int main(){ da(); int t,n,d;scanf("%d",&t); while (t--) { scanf("%d%d",&n,&d); n=(n-1)/d; n=min(n,d); for (int i=0;i<kp;i++) { if (d%ge[i]==0||ge[i]>n)//质数最多查一个d的因数---且最大到n-- { if (ge[i]>n) printf("%d\n",i); else printf("%d\n",++i); break; } } } return 0;}
0 0
- BestCoder Round #84 <LIS 2进制 思维>
- BestCoder Round #87(1003-【思维】【LIS&&LCS】)
- hdoj 5748 Bellovin (LIS) 【BestCoder Round #84 】
- BestCoder Round #91【思维】
- BestCoder Round #73 (div.2) (A)思维
- HDU 5606 tree BestCoder Round #68 (div.2) [思维]【数学】
- 【HDU5748 BestCoder Round 84B】【LIS模板 最长单调上升子序列】Bellovin 以尾端点最长LIS压缩数组
- HDU 5748 BestCoder Round #84 Bellovin (LIS)(树状数组)
- hdu 5087 Revenge of LIS II(BestCoder Round #16)
- BestCoder Round #84 Dertouzos
- BestCoder Round #84 题解
- BestCoder Round #84
- BestCoder Round #84
- BestCoder Round #84
- BestCoder Round #84 Bellovin
- 【索引】BestCoder Round #2
- BestCoder Round #2
- [BestCoder] Round #2
- 四大组件之Activity
- 初窥渗透--IIS6.0解析漏洞
- 码神学习作业(数组)
- 把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。
- jsp1
- BestCoder Round #84 <LIS 2进制 思维>
- python核心编程第六章练习
- 关于x86、i386、i486、i586和i686等名词的解释
- Java多线程研究01-创建线程
- jsp2
- Android应用程序内部切换语言及自定义语言
- HAproxy 个人总结
- hd 5615 Jam's math problem(枚举)
- 对图片压缩的重新认识