http://codeforces.com/contest/672/problem/A
#include <iostream>
#include <cstdio>
using namespace std;
int b[2010],a[1010],p = 1;
void cf()
{
for (int i = 1; i < 500 ;i++)
{
int temp = 0,m=0,ii = i;
while(ii)
{
a[m++] = ii % 10;
ii /= 10;
temp++;
}
for (int k = temp-1; k >= 0 ;k--)
{
b[p++] = a[k];
// cout << b[p-1] <<endl;
}
}
}
int main()
{
int n;
cf();
scanf("%d",&n);
cout <<b[n] <<endl;
return 0;
}
http://codeforces.com/contest/672/problem/B
#include <iostream>
#include <cstdio>
#include <algorithm>
int num[30];
char s[100010];
using namespace std;
int main()
{
int n;
cin >> n;
if(n > 26)
cout << -1<<endl;
else
{
scanf("%s",s);
for (int i = 0 ; i < n ; i++)
num[s[i] - 'a']++;
int ans = 0;
for (int i = 0 ; i < 26 ; i++)
{
if(num[i] > 1)
ans+=num[i] - 1;
}
cout << ans << endl;
}
return 0;
}
http://codeforces.com/contest/672/problem/C
给你A,B,C三个点的坐标,C表示垃圾桶,A,B表示人
在给你n个垃圾的坐标,问你两人每次最多可以携带一个垃圾到达垃圾桶
将这n个垃圾全部扔进垃圾桶最少走多少路
这里n个垃圾可以完全由其中一个或两个人捡起
题解:
在人到达C后,我们知道之后这个人捡垃圾都是从C到垃圾距离*2
我们假设所有垃圾都是从C出发捡的
那么最优解就是从A,B出发所节省的,前提是至少有一个人出发了,按照节省多少进行排序
找到节省最多的至多的两个点,更新答案