ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SZUACM2022招新积分赛Day1 总结

2022-05-22 00:01:36  阅读:123  来源: 互联网

标签:招新 cout int cin Day1 SZUACM2022 flag -- include


SZUACM2022招新积分赛 Day1

题目

下午场:

晚上场:

感想

下午场的状态实在差到离谱。。而且我图论完全乱来的emmm练得太少了(深刻忏悔)
感觉下午场难好多,搞得我非常的自闭。。。
晚上感觉还好一点,唉。。我好菜
下午场就基本是思路都没有,晚上场还可以说是有些差一点(漏情况)(虽说也很不应该。。。

补题

下午场

没做出来的有点多,明天上午再看看。。

A. Gym 103687A

考虑奇偶性,步数的判断。我出错的点就在于,没想到答案不会超过3,一步一步凑的。。。好笨
具体的看注释后面的样例

#include <bits/stdc++.h>

using namespace std;


int main () {
    int t;
    cin >> t;
    while (t --) {
        int a, b;
        cin >> a >> b;
        if (a > b) {
            if ((a - b) % 2 == 0)
                cout << 1 << endl;
            else
                cout << 2 << endl;
        }
        else if (a == b)
            cout << 0 << endl;
        else {
            if ((b - a) % 2)
                cout << 1 << endl;
            else if ((b - a) / 2 % 2)
                cout << 2 << endl;
            else
                cout << 3 << endl;
        }
    }
}
//改变奇偶性
//eg.2->6: +3 +3 -2
//答案不会超过3

晚上场

B. Gym 103107K

我贪错心了,直接想假了emmm
其实直接全部拼在一起就好

#include <bits/stdc++.h>
#define int long long

using namespace std;
//priority_queue <int, vector <int>, greater <int>> q;
priority_queue <int> q;
int ans = 0;
int a, b;
int maxn= 0;

signed main () {
    int n, k;
    cin >> n >> k;
    while (n --) {
        int x;
        cin >> x;
        ans += x;
    }

    if (ans >= k)
        cout << ans - (k + 1) / 2; //ceil
    else
        cout << 0;
}

//害,想假了

C. Gym 103107J

错因:一对一匹配,所以最终B没有的话也不行(因B的匹配也要看)
双向考虑

#include <bits/stdc++.h>

using namespace std;
typedef pair<int, int> pii;
const int N = 5e5 + 5;
int a[N], b[N];
int ans1, ans2;

int main () {
    int n, m;
    scanf("%d%d",&n,&m);
    ans1 = ans2 = n;
    
    while (m --) {
        int x, y;
        scanf("%d%d",&x,&y);
        a[x] ++, b[y] ++; //一对一匹配,所以也要考虑b啊
        if (a[x] >= n)
            ans1 --;
        if (b[y] >= n)
            ans2 --;
    }

    cout << min (ans1, ans2);
}
//有多少个A可以正常跑的
//A与所有的B都不能跑

//配对
//一一匹配所以B也要考虑
//卡读写的题就是纯纯的。。。

D.CodeForces 1628B

差一点就能写出div1B了(少讨论了前3后2的情况)
(话说我其实想到了,但是没写上去,不知道为啥,晕了)
Way1:在set里面找,似乎要慢一点

#include <bits/stdc++.h>


using namespace std;
const int N = 1e5 + 5;

void solve () {

    set<string> s;
    int n;
    cin >> n;
    bool flag = false;
    for (int i = 1; i <= n; i  ++)  {
        string t;
        cin >> t;
        if (flag)
            continue;

        if (t[0] == t[t.size() - 1]) {
            flag = true;
            continue;
        } //自身回文

        s.insert (t);

        int len = t.size (); 
        reverse (t.begin(), t.end());

        if (s.count (t)) {
            flag = true;
            continue;
        }

        //ab   cba
        //t="abc"

        //现3,匹配2
        if (len == 3) {
            string tt;
            for (int i = 0; i < 2; i ++)
                tt += t[i];
            //cout << tt << endl;
            if (s.count (tt)) {
                flag = true;
                continue;
            }
        }

        //现2,匹配3
        else if (len == 2) {
            for (auto j : s) {
                if (t[0] == j[0] && t[1] == j[1]) {
                    flag = true;
                    break;
                }
            }
        }
        
    }

    if (flag)
        cout << "YES" << endl;
    else
        cout << "NO"  << endl;
    
}

int main () {
    int t;
    cin >> t;
    while (t --) {
        solve ();
    }
    
}
//去掉某几个后能否变得回文

//如果找到两个完全相反的一定yes
//出现单个回文yes
//中间多出来一个也yes(case4)


//eg
//ab (cc) ba
//NO
//NO
//a
//ab cba
//NO

Way2:直接枚举26种拼接(与方法一就只有前3后2的判别上有区别)
比第一种快一些(但是大佬觉得太暴力了,打灭x)

//加字母拼起来,更快
#include <bits/stdc++.h>


using namespace std;
const int N = 1e5 + 5;

void solve () {

    set<string> s;
    int n;
    cin >> n;
    bool flag = false;
    for (int i = 1; i <= n; i  ++)  {
        string t;
        cin >> t;
        if (flag)
            continue;

        if (t[0] == t[t.size() - 1]) {
            flag = true;
            continue;
        } //自身回文

        s.insert (t);

        int len = t.size (); 
        reverse (t.begin(), t.end());

        if (s.count (t)) {
            flag = true;
            continue;
        }

        //ab   cba
        //t="abc"

        //现3,匹配2
        if (len == 3) {
            string tt;
            for (int i = 0; i < 2; i ++)
                tt += t[i];
            //cout << tt << endl;
            if (s.count (tt)) {
                flag = true;
                continue;
            }
        }

        //现2,匹配3
        else if (len == 2) {
            //更快的做法
            for (char ch = 'a'; ch <= 'z'; ch ++) {
                string tmp = t + ch;
                if (s.count (tmp)) {
                    flag = true;
                    break;
                }
            }
            // for (auto j : s) {
            //     if (t[0] == j[0] && t[1] == j[1]) {
            //         flag = true;
            //         break;
            //     }
            // }
        }
        
    }

    if (flag)
        cout << "YES" << endl;
    else
        cout << "NO"  << endl;
    
}

int main () {
    int t;
    cin >> t;
    while (t --) {
        solve ();
    }
    
}
//去掉某几个后能否变得回文

//如果找到两个完全相反的一定yes
//出现单个回文yes
//中间多出来一个也yes(case4)


//eg
//ab (cc) ba
//NO
//NO
//a
//ab cba
//NO

F. CodeForces 664A

没想到防ak的题目才是真正的签到题(真是极具迷惑性)
直接赌徒心态

#include <bits/stdc++.h>

using namespace std;

int main () {
    string s, t;
    cin >> s >> t;
    if (s == t)
        cout << s;
    else {
        cout << 1;
    }
}
//赌

其余的题目明早补。
希望明天我能给力点啊QAQwwwww

标签:招新,cout,int,cin,Day1,SZUACM2022,flag,--,include
来源: https://www.cnblogs.com/CTing/p/16296683.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有