cf#352

A题

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;
}

B题

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;
}

c题

http://codeforces.com/contest/672/problem/C

题意:

  给你A,B,C三个点的坐标,C表示垃圾桶,A,B表示人

  在给你n个垃圾的坐标,问你两人每次最多可以携带一个垃圾到达垃圾桶

  将这n个垃圾全部扔进垃圾桶最少走多少路

  这里n个垃圾可以完全由其中一个或两个人捡起

题解:

  在人到达C后,我们知道之后这个人捡垃圾都是从C到垃圾距离*2

  我们假设所有垃圾都是从C出发捡的

  那么最优解就是从A,B出发所节省的,前提是至少有一个人出发了,按照节省多少进行排序

  找到节省最多的至多的两个点,更新答案
  

你可能感兴趣的:(cf#352)