头像

周赛坐牢选手

whpu




离线:3小时前


最近来访(327)
用户头像
李小飞
用户头像
晓馨的lsp
用户头像
C___
用户头像
俄罗斯刺沙蓬
用户头像
-浪漫主义狗-
用户头像
kkksc007
用户头像
艳姣
用户头像
_huge
用户头像
太雪菜
用户头像
points233
用户头像
诚_7
用户头像
xiaojia
用户头像
X+7
用户头像
vendestine
用户头像
15163669008
用户头像
liberty..
用户头像
镇神
用户头像
HeXing
用户头像
MinGwin
用户头像
冰凝水


typedef pair<int, string> IS;
class Solution {
public:
    unordered_map<string, int> m;
    vector<string> topKFrequent(vector<string>& words, int k) {
        for (auto &i : words) m[i] ++;
        vector<pair<int, string>>a;
        for (auto &[x, y] : m) a.emplace_back(y, x);
        sort(a.begin(), a.end(), [](IS& x, IS& y){
            if (x.first != y.first) return x.first < y.first;
            return x.second > y.second; //从后往前  所以是大于号
        });
        vector<string> res;
        int idx = a.size() - 1;
        while (k --) res.push_back(a[idx--].second);
        return res;
    }
};



/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    map<int, map<int, vector<int>>> m; //键:纵坐标 + 横坐标 值:val
    vector<vector<int>> verticalTraversal(TreeNode* root) {
        dfs(root, 0, 0);
        vector<vector<int>> res;
        for (auto &[_, yy] : m) {
            vector<int>tmp;
            for (auto &[__, y] : yy) {
                sort(y.begin(), y.end());
                for (auto &k : y) tmp.push_back(k);
            }
            res.push_back(tmp);
        }
        return res;
    }

    void dfs(TreeNode* p, int x, int y)
    {
        m[y][x].push_back(p->val);
        if (!p->left && !p->right) 
            return ;
        if (p->left) dfs(p->left, x + 1, y - 1);
        if (p->right) dfs(p->right, x + 1, y + 1);
    }
};


活动打卡代码 LeetCode 946. 验证栈序列

class Solution {
public:
    bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
        stack <int> st;
        int idx = 0, n = popped.size();
        for (int x : pushed) {
            st.push(x);
            while (st.size() && idx < n && st.top() == popped[idx]) {
                st.pop();
                idx ++;
            }
        }
        return st.empty();
    }
};



#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
typedef long long LL;
int mod = 47;

int main()
{
    string s1, s2; cin >> s1 >> s2;
    LL t1 = 1, t2 = 1;
    for (auto i : s1) {
        t1 *= (i - 'A' + 1);
        t1 %= mod;
    }
    for (auto i : s2) {
        t2 *= (i - 'A' + 1);
        t2 %= mod;
    }
    // t1 %= mod;
    // t2 %= mod;
    // cout << t1 << ' ' << t2 << endl;
    cout << ((t1 == t2) ? "GO" : "STAY");

    return 0;
}


活动打卡代码 LeetCode 1282. 用户分组

class Solution {
public:
    vector<vector<int>> groupThePeople(vector<int>& groupSizes) {
        unordered_map<int, vector<int>> m;
        vector<vector<int>> res;
        for (int i = 0; i < groupSizes.size(); i ++) {
            int x = groupSizes[i];
            m[x].push_back(i);
            if (m[x].size() == x) {
                res.push_back(m[x]);
                m[x].clear();
            }
        }
        return res;
    }
};



#include <iostream>
#include <algorithm>

using namespace std;

const int N = 110;


int n;
int a[N][N];


int gauss()
{
    int c, r;
    for (c = 0, r = 0; c < n; c ++ )
    {
        int t = r;
        for (int i = r; i < n; i ++ )
            if (a[i][c])
                t = i;

        if (!a[t][c]) continue;

        for (int i = c; i <= n; i ++ ) swap(a[r][i], a[t][i]);
        for (int i = r + 1; i < n; i ++ )
            if (a[i][c])
                for (int j = n; j >= c; j -- )
                    a[i][j] ^= a[r][j];

        r ++ ;
    }

    if (r < n)
    {
        for (int i = r; i < n; i ++ )
            if (a[i][n])
                return 2;
        return 1;
    }

    for (int i = n - 1; i >= 0; i -- )
        for (int j = i + 1; j < n; j ++ )
            a[i][n] ^= a[i][j] * a[j][n];

    return 0;
}


int main()
{
    cin >> n;

    for (int i = 0; i < n; i ++ )
        for (int j = 0; j < n + 1; j ++ )
            cin >> a[i][j];

    int t = gauss();

    if (t == 0)
    {
        for (int i = 0; i < n; i ++ ) cout << a[i][n] << endl;
    }
    else if (t == 1) puts("Multiple sets of solutions");
    else puts("No solution");

    return 0;
}



#include <iostream>
#include <algorithm>
#include <cmath>

using namespace std;

const int N = 110;
const double eps = 1e-6;

int n;
double a[N][N];


int gauss()
{
    int c, r;// c 代表 列 col , r 代表 行 row
    for (c = 0, r = 0; c < n; c ++ )
    {
        int t = r;// 先找到当前这一列,绝对值最大的一个数字所在的行号
        for (int i = r; i < n; i ++ )
            if (fabs(a[i][c]) > fabs(a[t][c]))
                t = i;

        if (fabs(a[t][c]) < eps) continue;// 如果当前这一列的最大数都是 0 ,那么所有数都是 0,就没必要去算了,因为它的约束方程,可能在上面几行

        for (int i = c; i < n + 1; i ++ ) swap(a[t][i], a[r][i]);//// 把当前这一行,换到最上面(不是第一行,是第 r 行)去
        for (int i = n; i >= c; i -- ) a[r][i] /= a[r][c];// 把当前这一行的第一个数,变成 1, 方程两边同时除以 第一个数,必须要到着算,不然第一个数直接变1,系数就被篡改,后面的数字没法算
        for (int i = r + 1; i < n; i ++ )// 把当前列下面的所有数,全部消成 0
            if (fabs(a[i][c]) > eps)// 如果非0 再操作,已经是 0就没必要操作了
                for (int j = n; j >= c; j -- )// 从后往前,当前行的每个数字,都减去对应列 * 行首非0的数字,这样就能保证第一个数字是 a[i][0] -= 1*a[i][0];
                    a[i][j] -= a[r][j] * a[i][c];

        r ++ ;// 这一行的工作做完,换下一行
    }

    if (r < n)// 说明剩下方程的个数是小于 n 的,说明不是唯一解,判断是无解还是无穷多解
    {// 因为已经是阶梯型,所以 r ~ n-1 的值应该都为 0
        for (int i = r; i < n; i ++ )// 
            if (fabs(a[i][n]) > eps)// a[i][n] 代表 b_i ,即 左边=0,右边=b_i,0 != b_i, 所以无解。
                return 2;
        return 1;// 否则, 0 = 0,就是r ~ n-1的方程都是多余方程
    }
    // 唯一解 ↓,从下往上回代,得到方程的解
    for (int i = n - 1; i >= 0; i -- )
        for (int j = i + 1; j < n; j ++ )
            a[i][n] -= a[j][n] * a[i][j];//因为只要得到解,所以只用对 b_i 进行操作,中间的值,可以不用操作,因为不用输出

    return 0;
}

int main()
{
    cin >> n;
    for (int i = 0; i < n; i ++ )
        for (int j = 0; j < n + 1; j ++ )
            cin >> a[i][j];

    int t = gauss();

    if (t == 0)
    {
        for (int i = 0; i < n; i ++ ) 
            if (abs(a[i][n]) < 1e-8) puts("0.00");
            else printf("%.2lf\n", a[i][n]);
    }
    else if (t == 1) puts("Infinite group solutions");
    else puts("No solution");

    return 0;
}


活动打卡代码 AcWing 894. 拆分-Nim游戏

#include <iostream>
#include <cstring>
#include <unordered_set>

using namespace std;

const int N = 110;

int n;
int f[N];
unordered_set<int> S;

int sg(int x)
{
    if(f[x] != -1) return f[x];


    for(int i = 0 ; i < x ; i++)
        for(int j = 0 ; j <= i ; j++)
            S.insert(sg(i) ^ sg(j)); //两个局面

    for(int i = 0 ; ; i++)
        if(!S.count(i))
            return f[x] = i;
}

int main()
{
    memset(f , -1 , sizeof f);

    cin >> n;
    int res = 0;
    while(n--)
    {
        int x;
        cin >> x;
        res ^= sg(x);
    }

    if(res) puts("Yes");
    else puts("No");
    return 0;
}


活动打卡代码 AcWing 893. 集合-Nim游戏

#include <cstring>
#include <iostream>
#include <algorithm>
#include <unordered_set>

using namespace std;

const int N = 110, M = 10010;

int n, m;
int s[N], f[M];

int sg(int x)
{
    if (f[x] != -1) return f[x];

    unordered_set<int> S;
    for (int i = 0; i < m; i ++ )
    {
        int sum = s[i];
        if (x >= sum) S.insert(sg(x - sum));
    }

    for (int i = 0; ; i ++ ) //最小的
        if (!S.count(i))
            return f[x] = i;
}


int main()
{
    cin >> m;
    for (int i = 0; i < m; i ++ ) cin >> s[i];
    cin >> n;

    memset(f, -1, sizeof f);

    int res = 0;
    for (int i = 0; i < n; i ++ )
    {
        int x;
        cin >> x;
        res ^= sg(x);
    }

    if (res) puts("Yes");
    else puts("No");

    return 0;
}


活动打卡代码 AcWing 892. 台阶-Nim游戏

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
    int res = 0;
    int n; cin >> n;
    for (int i = 1; i <= n; i ++ ) {
        int a; cin >> a;
        if (i & 1) res ^= a;
    }
    if (res == 0) cout << "No";
    else cout << "Yes";
    return 0;
}