CF 899D Shovel Sell 思维.
2017-12-20 16:22
288 查看
题意:序列1,2....n. 问从中选出两个数(x,y) 要让x+y末尾9的个数最多.问有多少种方案? n<=1e9.
先确定对于给定的n 末尾9的个数最多为多少?
假如末尾9的个数最多为x,则有 n+(n-1)+1>=10^x
末尾有x个9 那么首位y :y99999. 1=<y<9 y为最高位 否则末尾9的个数可以增大.
[1..n]中有多少对(a,b)满足 a+b=y.
如果y<=n 那么有(y-1)/2 对(a,b)满足相加等于y. (1,y-1),(2,y-2)...(y/2-1,y/2+1).
如果y>=n 受到n限制 (a,b)对数为 max(0,n-y/2))
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
ll n,x=1,num=0;
int main()
{
cin>>n;
while(2ll*n>=x)
x*=10,num++;
x/=10,num--;
// cout<<num<<endl;
ll res=0;
for(int i=1;i<=9;i++)
{
ll y=x*i-1;
if(y<=n)
res+=(y-1)/2;
else
{
ll mid=y/2;
res+=max(0ll,n-mid);
}
}
cout<<res<<endl;
return 0;
}
先确定对于给定的n 末尾9的个数最多为多少?
假如末尾9的个数最多为x,则有 n+(n-1)+1>=10^x
末尾有x个9 那么首位y :y99999. 1=<y<9 y为最高位 否则末尾9的个数可以增大.
[1..n]中有多少对(a,b)满足 a+b=y.
如果y<=n 那么有(y-1)/2 对(a,b)满足相加等于y. (1,y-1),(2,y-2)...(y/2-1,y/2+1).
如果y>=n 受到n限制 (a,b)对数为 max(0,n-y/2))
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
ll n,x=1,num=0;
int main()
{
cin>>n;
while(2ll*n>=x)
x*=10,num++;
x/=10,num--;
// cout<<num<<endl;
ll res=0;
for(int i=1;i<=9;i++)
{
ll y=x*i-1;
if(y<=n)
res+=(y-1)/2;
else
{
ll mid=y/2;
res+=max(0ll,n-mid);
}
}
cout<<res<<endl;
return 0;
}
相关文章推荐
- CF_415_PA(思维题)
- CF-12E - Start of the season(思维)
- CF 782D. Innokenty and a Football League 贪心,思维,模拟
- CF - 789B. Masha and geometric depression - 暴力+模拟/思维
- CF- 798A. Mike and palindrome - 思维
- CF - 797A. k-Factorization - 思维+贪心+数学
- cf(思维,数学)
- cf 908B. New Year and Buggy Bot[暴力+思维]
- CF- 798A. Mike and palindrome - 思维
- CF 551c 二分搜索+思维题
- cf(思维题)
- CF - 652A. Gabriel and Caterpillar 模拟+思维
- CF - 749D 二分 + 思维
- CF - 805C. Find Amir - 贪心思维+构造
- CF 599D 思维
- 【CF】-Chips(思维)
- CF - 807C. Success Rate - 二分+思维+数学
- CF - 519D. A and B and Interesting Substrings - 前缀和思维+map
- CF 452B 4-point polyline(思维)
- cf 433 C(思维题)