codeforces Round #677 (Div. 3) 1433A Boring Apartments

it2025-04-23  12

题目链接

题目翻译:

有一个由10000个公寓组成的建筑,公寓的编号从1到10000(包含1和10000)。 如果一个公寓的编号由相同的数字组成,则称这个公寓是无聊的。比如11,2,777,9999。 我们的角色是一个捣蛋鬼,以下面的顺序不停地拨打所有无聊公寓的对讲机,直到有人回应:

首先拨打所有由数字1组成的公寓,以递增的顺序(1,11,111,1111)。然后拨打所有由数字2组成的公寓,以递增的顺序(2,22,222,2222)。以此类推 无聊公寓x的住户回应之后,我们才会停止拨打。 我们想要知道我们总共按了多少个数字,因此你的任务是计算我们总共按了多少个数字。 比如,如果无聊公寓22回应了,那么我们就拨打过1,11,111,1111,2,22,因此我们总共按了1+2+3+4+1+2=13个数字。 你需要回答t个独立的测试用例。
解题思路:

可知结果受两个因素影响,一个是x是由什么数字组成的,另一个是x有几个数字。比如x=22,那么在数字2之前有1,按完1的所有可能需要1+2+3+4=10次;x有两个数字,所以要再按1+2=3次,所以总共是10+3=13次。 总结:设x由a个b组成,那么结果就是(b-1)*10+a*(a+1)/2

代码:
#include<iostream> #include<cstring> #include<string> #include<algorithm> #include<vector> #include<map> #include<queue> #include<cstdio> #include<cmath> #define inf 0x3f3f3f3f using namespace std; int main(){ // freopen("1.txt","r",stdin); int t,n; string s; cin>>t; while(t--){ cin>>s; int a = s[0]-'0'; int b = s.size(); cout<<(a-1)*10+b*(b+1)/2<<endl; } return 0; }
最新回复(0)