寒假刷题第七天

PTA甲级

1037 Magic Coupon

排序

n = int(input())
a = list(map(int , input().split()))
m = int(input())
b = list(map(int , input().split()))
za , zb , fa , fb = [i for i in a if i > 0] , [i for i in b if i > 0] ,[i for i in a if i < 0] , [i for i in b if i < 0]
za.sort();zb.sort();fa.sort();fb.sort();
res = 0;za = za[::-1];zb = zb[::-1];
for i in range(min(len(za) , len(zb))):
    res += za[i] * zb[i]
for i in range(min(len(fb) , len(fa))):
    res += fa[i] * fb[i]
print(res)

1038 Recover the Smallest Number

自定义排序

#include
#include
#include

using namespace std;

const int N = 1e4 + 10;
int n;
vectorres(N);
bool cmp(string a , string b){return a + b < b + a;}

int main()
{
    cin >> n;
    for(int i = 0;i < n;i ++) 
        cin >> res[i];
    sort(res.begin() , res.begin() + n , cmp);
    string s = "";
    bool f = false;
    for(int i = 0;i < res.size();i ++)
    {
        if(i == 0 || f) 
        {
            int j = 0;
            while(res[i][j] == '0') j ++;
            if(j < res[i].size()) s += res[i].substr(j) , f = false;
            else f = true;
        }
        else s += res[i];
    }
    if(s.size()) cout << s << endl;
    else cout << 0 << endl;
    return 0;
}

1039 Course List for Student

哈希表

#include
#include
#include

using namespace std;

unordered_map>mp;
int n , k;

int main()
{
    cin >> n >> k;
    for(int i = 0;i < k;i ++)
    {
        int id , m;
        cin >> id >> m;
        for(int j = 0;j < m;j ++)
        {
            string s;
            cin >> s;
            mp[s].insert(id);
        }
    }
    while(n --)
    {
        string s;
        cin >> s;
        cout << s << " " << mp[s].size();
        for(auto i : mp[s])
            cout << " " << i;
        cout << endl;
    }
    return 0;
}

1040 Longest Symmetric String

暴力枚举就行

#include
#include

using namespace std;

int main()
{
    string s;
    getline(cin , s);
    int res = 0;
    for(int i = 0;i < s.size();i ++)
    {
        for(int j = 1;j <= s.size() - i;j ++)
        {
            string t = s.substr(i , j);
            string t1 = t;
            reverse(t1.begin() , t1.end());
            if(t == t1 && res < t1.size()) res = t1.size();
        }
    }
    printf("%d" , res);
    return 0;
}

你可能感兴趣的:(寒假刷题,算法,c++,数据结构)