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

题目链接

在这里插入图片描述

题目翻译:

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

  • 首先拨打所有由数字1组成的公寓,以递增的顺序(1,11,111,1111)。
  • 然后拨打所有由数字2组成的公寓,以递增的顺序(2,22,222,2222)。
  • 以此类推
    无聊公寓x的住户回应之后,我们才会停止拨打。
    我们想要知道我们总共按了多少个数字,因此你的任务是计算我们总共按了多少个数字。
    比如,如果无聊公寓22回应了,那么我们就拨打过1111111111,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次。
总结:设xab组成,那么结果就是(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;
}

猜你喜欢

转载自blog.csdn.net/lmmmmmmmmmmmmmmm/article/details/109210575