五月三十一号的想开了 的题想补一补 但是那是 十点以后了吧
这是暴力出奇迹吗??
感觉有的题目虽然是暴力 但是要逻辑清晰吧
freopen (“1.txt”,“r”)
J 01 背包问题
int p[20] = {0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,51};
ll ans,n,t;
void dfs(int pos,ll num,ll sum,int len)//当前枚举p的位置,约数个数,数sum,前一个质因子的指数最大值
{
if (sum>n) return ;
if (sum<=n) ans=max(ans,num);
for (int i=1;i<=len;i++) {
ll res=pow(p[pos],i);
if (sum>n/res) break;//注意不要用sum*res>n,炸long long
dfs(pos+1,num*(i+1),sum*(res),i);
}
}
int main()
{
cin>>t;
while(t--)
{
cin>>n;
ans=0;
dfs(1,1,1,30);
cout<<ans<<endl;
}
return 0;
}
发现询问次数较少,考虑搜索
一个数的约数个数即分解质因数后,每个质因数出现次数+1的乘积
搜索的时候f(i,j,k)表示搜索了前i个质因数,现在乘积为j,上一个质因数出现次数为k
贪心的考虑,可以发现用越小的质因数越好,于是k不增
这样就可以搜出来了
今天碰到一个关于四舍五入的题目呀
#include<bits/stdc++.h>
using namespace std;
char op[10];
int a,b,n,s[2000];
void ss()
{
int c=a/b;
a%=b;
for(int i=1;i<=n+1;i++)
{
a*=10;
s[i]=a/b;
a%=b;
}
if(s[n+1]>=5&&op[0]=='Y')
{
int i=n;
while(i&&s[n]==9)
s[n]=0,i--;
if(i!=0)s[i]++;
else
c++;
}
printf("%d.",c);
for(int i=1;i<=n;i++)printf("%d",s[i]);
puts("");
}
int main()
{
while(cin>>a>>b>>n>>op)
{
if(n)
ss();
else
{
int c=a/b,t=a%b;
if(op[0]!='X')
{
if(t*2>=b)c++;
}
printf("%d\n",c);
}
}
}
二分加搜索