2020年1月14日
A. Deadline
需要找到最优解,
我犯的错误:第一点没有注意时间,从第一个开始找,结果超时
第二个点找到最优解的范围,这时候这之间的范围都应该尝试,而不是只试这个点
需要注意题目时间,一般都为1s,而这一题是2s
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
int t;
ll n,d;
ll sum,sum1,sum2;
int main(){
cin>>t;
while(t--){
scanf("%lld%lld",&n,&d);
if(d<=n){
cout<<"YES"<<endl;
}
else{
for(ll i=1;i<=d;i++){
if(i*i>=d){
sum=i;
sum1=i-1;
if(i>=2)
sum2=i-2;
else
sum2=i+1;
break;
}
}
if(d%(sum+1)==0){
sum=sum+d/(sum+1);
}
else{
sum=sum+d/(sum+1)+1;
}
if(d%(sum1+1)==0){
sum1=sum1+d/(sum1+1);
}
else{
sum1=sum1+d/(sum1+1)+1;
}
if(d%(sum2+1)==0){
sum2=sum2+d/(sum2+1);
}
else{
sum2=sum2+d/(sum2+1)+1;
}
if(sum<=n||sum1<=n||sum2<=n)
{
cout<<"YES"<<endl;
}
else
cout<<"NO"<<endl;
}
}
return 0;
}
B. Yet Another Meme Problem
第一点我就没想到,就是数学公式的转化。
ab+a+b=**a10^c+b** (c为b的位数)
转化成b=10^c-1;
第一点判断我就没有想上去
第二点就是不用从1到b一个一个去判断这样会超时,
而是需要b在10^c-1的范围,直接求解
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
ll a,b;
int t;
ll sum;
ll s[10]={0,9,99,999,9999,99999,999999,9999999,99999999,999999999};
int main(){
cin>>t;
while(t--){
sum=0;
scanf("%lld%lld",&a,&b);
for(int i=1;i<=9;i++){
if(s[i]<=b){
sum+=a;
}
}
printf("%lld\n",sum);
}
return 0;
}