CodeForces

来源:互联网 发布:node.js能做什么 编辑:程序博客网 时间:2024/06/12 19:51

http://codeforces.com/problemset/problem/899/D

题意:给你1,2,...,n,现在要求取出一对数相加为x。x需要满足:以最多个9结尾。现在给你n,求这样的数对有几个。

*例如,9099算以两个9结尾

题解:设题意的x最多以k个9结尾。

①先想到要求这个k是多少,可以发现一个特殊的数字5,50,500,...。当n<5时,k=0;当n>=5&&n>50时,k=1;当n>=50&&n<500时,k=2...也就是说x是这一样一个数:Z999......(0<=Z<=8,后面接上k个9)。

②经过第一步分解成Z个子问题之后,现在要求解子问题的数对。这个求解就可以自己总结出结论了,可以以14这个输入总结得到。

代码:

#include<bits/stdc++.h>#define debug cout<<"aaa"<<endl#define d(a) cout<<a<<endl#define pb push_back#define mem(a,b) memset(a,b,sizeof(a))#define LL long long#define lson l,mid,root<<1#define rson mid+1,r,root<<1|1#define MIN_INT (-2147483647-1)#define MAX_INT 2147483647#define MAX_LL 9223372036854775807i64#define MIN_LL (-9223372036854775807i64-1)using namespace std;const int N = 100000 + 5;const int M = N * N + 5;const int mod = 1000000000 + 7;const int INF = 0x3f3f3f3f;const double eps = 1e-8;int main(){LL n,k,temp=1,A,ans=0;cin>>n;LL num=5;//小于5的时候特判,这时候k等于9 if(n<5){cout<<n*(n-1)/2<<endl;return 0;}//求解最多以几个9结尾 for(int i=1;i<=11;i++){if(n<num){k=i-1;break;}num*=10;}num=0;for(int i=1;i<=k;i++){num=num*10+9;temp*=10;}for(int i=0;i<=8;i++){//A就是Z999... //num是999... A=i*temp+num;if(n<(A+1)/2){break;}else if(n>(A-1)){ans=ans+A/2;}else{ans=ans+(n-(A+1)/2+1);}}cout<<ans<<endl;return 0;}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 2个月宝宝厌食怎么办 宝宝吃母乳不长体重怎么办 9个月宝宝不长牙怎么办 3个月宝宝过胖怎么办 宝宝长的很慢怎么办 想一个月瘦20斤怎么办 山药弄胳膊上痒怎么办 手碰山药很痒怎么办 手摸了山药很痒怎么办 手切了山药很痒怎么办 山药弄的身上痒怎么办 疣迪去除疣体怎么办 尖锐湿庞出血了怎么办 尿道口周围烂了怎么办 尖锐湿庞复发了怎么办 宝宝脸上长湿疹怎么办如何治疗 孕妇得尖锐湿庞怎么办 痘痘留下的小坑怎么办 花洒固定座坏了怎么办 脚上起水泡烂了怎么办 月经期吃了芒果怎么办 月经量少又黑怎么办 来月经黑色的血怎么办 月经来的是黑色怎么办 来月经有血块是怎么办 月经又少又黑怎么办 来月经发黑又少怎么办 月经血发黑量少怎么办 做人流后肚子胀怎么办 怀孕见红了肚子不痛怎么办 月经来是黑色的怎么办 怀孕了长了痔疮怎么办 怀孕了有外痔疮怎么办 孕妇长痔疮很痛怎么办 孕9个月尿路感染怎么办 旁边有人尿不出来怎么办 外阴破皮了应该怎么办 脸上长脂肪粒怎么办怎么能消除 挤黑头留下的坑怎么办 长痘留下的坑怎么办 鼻子上留下黑印怎么办