首页 > 其他分享 >Codeforces Round 799 (Div. 4)(vp)

Codeforces Round 799 (Div. 4)(vp)

时间:2023-08-11 23:34:06浏览次数:41  
标签:cout int Codeforces vp ++ mp && ans Div

Codeforces Round 799 (Div. 4)

A Marathon

void solve() {
    vector<int> a(4);
    int goal;
    cin >> goal;
    int ans = 0;
    for(int i = 0; i < 3; i++) {
        int x;
        cin >> x;
        if(goal < x)ans++;
    }
    cout << ans << endl;
}

B All Distinct

void solve() {
    map<int, int> mp;
    int n;
    cin >> n;
    for(int i = 0; i < n; i++) {
        int x;
        cin >> x;
        mp[x]++;
    }
    int ans = 0;
    for(auto [x, y] : mp) {
        if(y % 2 == 0)ans++;
    }
    cout << mp.size() - (ans % 2) << endl;
}
 

C Where's the Bishop?

题意:判断这个位置是#字符时i,它的四个角是不是也是#,保证有解

思路:直接暴力每个位置判断一下即可

char g[N][N];
 
void solve() {
    for(int i = 0; i < 8; i++)cin >> g[i];
    for(int i = 1; i < 7; i++) {
        for(int j = 1; j < 7; j++) {
            if(g[i][j] == '#' && g[i - 1][j - 1] == '#' && g[i - 1][j + 1] == '#' && g[i + 1][j - 1] == '#' && g[i + 1][j + 1] == '#') {
                cout << i + 1 << ' ' << j + 1 << endl;
                return ;
            }
        }
    }
}

D The Clock

题意:给你一个起始时间,再给你一个k,让你每次都加k分钟,看看每次加了以后的时间的字符串是不是一个回文串,区间为\(0\dots1440\)的一个环,不段加,直到遇见已经遇到过的时间就停止

思路:按照题目模拟,用set去存遇到过的时间,每次判断一下即可

bool huiwen(int x) {
    int h = x / 60;
    int m = x % 60;
    string s1 = to_string (h);
    if(s1.size() == 1)s1 = '0' + s1;
    string s2 = to_string(m);
    if(s2.size() == 1)s2 = '0' + s2;
    reverse(ALL(s1));
    if(s1 == s2) {
        // cout << s1 << ' ' << s2 << endl;
        return true;
    }
    return false;
}
 
void solve() {
    string s;
    cin >> s;
    int h = (s[0] - '0') * 10 + (s[1] - '0');
    int m = (s[3] - '0') * 10 + (s[4] - '0');
    // cout << h << ' ' << m << endl;
    int x;
    cin >> x;
    int star = h * 60 + m;
    int ans = 0;
    int pos = star;
    set<int> st;
    for(int i = star; ; i += x, pos += x) {
        if(i >= 1440)i %= 1440;
        if(st.count(i))break;
        st.insert(i);
        if(huiwen(i))ans++;
 
    }
    // for(int i = pos % 1440; i < star ; i += x) {
    //     if(huiwen(i))ans++;
    // }
    cout << ans << endl;
    // cout << pos << endl << endl;
}

E Binary Deque

题意:求最长的一段区间和为题目给定的值

思路:直接使用双指针和前缀和即可,每次都更新答案,好像也可以去二分答案,\(O(N)\)去check

void solve() {
    int n, x;
    cin >> n >> x;
    vector<int> a(n + 1, 0);
    int sum = 0;
    for(int i = 1; i <= n; i++) {
        cin >> a[i];
        sum += a[i];
        a[i] += a[i - 1];
    }
    int ans = INT_MAX;
    for(int i = 1, j = 1; i <= n; i++) {
        while(a[i] - a[j - 1] > x)j++;
        if(a[i] - a[j - 1] == x)ans = min(ans, n - (i - j + 1));
    }
    if(ans == INT_MAX)cout << -1 << endl;
    el

F 3SUM

题意:问你所给的书里面,是否能找到三个数之和的各位是3

思路:这个题直接枚举三个数太大,并且\(n^2\)的枚举前两个数去二分第三个数也不行,所以我们你可以预先把出现过的数的个位存到map里面,如何用三个\(for\)循环判断哪些数的和个位数为3,如何再到相应的map里找所需要的数够不够即可

void solve() {
    int n;
    cin >> n;
    map<int, int> mp;
    for(int i = 0; i < n; i++) {
        int x;
        cin >> x;
        mp[x % 10]++;
    }
    // for(auto [x, y] : mp)cout << x << ' ' << y << endl;
    bool ok = false;
    for(int i = 0; i <= 9; i++) {
        for(int j = 0; j <= 9; j++) {
            for(int k = 0; k <= 9; k++) {
                if((i + j + k) % 10 == 3) {
                    if(i == j && j == k && mp[i] >= 3)ok = true;
                    else if(i == j && j != k && mp[i] >= 2 && mp[k] >= 1)ok = true;
                    else if(i == k && k != j && mp[i] >= 2 && mp[j] >= 1)ok = true;
                    else if(k == j && i != k && mp[j] >= 2 && mp[i] >= 1)ok = true;
                    else if(i != j && j != k&&i!=k && mp[j] >= 1 && mp[k] >= 1 && mp[i] >= 1)ok = true;
                    if(ok) {
                    	// cout << mp[i] << ' ' <<LL mp[j] << ' ' << mp[k] << endl;
                        // cout << i << ' ' << j << ' ' << k << endl;
                        cout << "YES" << endl;
                        return ;
                    }
                }
            }
        }
    }
    cout << "NO" << endl;
}

G 2^Sort

题意:给一个数组,问在这个数组里能不能找到连续的\(k+1\)数,更正式地说,计算有多少个索引 \(1 \leq i \leq n - k\),使得\(2^0 \cdot a_i < 2^1 \cdot a_{i+1} < 2^2 \cdot a_{i+2} < \dots < 2^k \cdot a_{i+k}.\)

思路:题意起始也就是求连续的区间满足后\(a[i]\) \(\times\) \(2\) \(\le\) \(a[i-1]\),如何这些满足条件的连续区间能够构成多少题目要求的子区间

void solve() {
    int n, k;
    cin >> n >> k;
    vector<int> a(n), vis(n, false);
    for(auto &i : a)cin >> i;
    int cnt = 1;
    int ans = 0;
    for(int i = 1; i < n; i++) {
        if(a[i] * 2 > a[i - 1]) {
            cnt++;
        } else {
            // cout << cnt << endl;
            if(cnt >= k)ans += (cnt - k - 1) + 1;
            cnt = 1;
        }
    }
    // cout << cnt << endl;
    if(cnt > k)ans += (cnt - k - 1) + 1;
    cout << ans << endl;
}

标签:cout,int,Codeforces,vp,++,mp,&&,ans,Div
From: https://www.cnblogs.com/north-h/p/17624140.html

相关文章

  • Codeforces 1854E - Game Bundles
    都这么会乱搞的吗/xia随机生成若干\(<30\)的数直到它们当中和为\(60\)的子集个数\(>k\)为止。删去最后一个元素。然后考虑贪心确定\(>30\)的部分,具体方法是按照\(dp_{60-x}\)从大到小贪心选,如果剩余子集个数\(\gedp_{60-x}\)就在序列中加入\(x\)。如此随机化直到找......
  • CodeForces 1610F Mashtali: a Space Oddysey
    洛谷传送门CF传送门比较有启发性的题。首先,设\(a_u\)为与点\(u\)相连的边权和,答案的上界显然是\(\sum\limits_{i=1}^n[a_u\bmod2=1]\)。之后我们把P7816「Stoi2029」以父之名第一篇题解的做法搬过来,也就是:建一个虚点向原图度数为奇数的点连边权为\(1\)的边......
  • 【题解】Educational Codeforces Round 147(CF1821)
    自己做出来了A-E,F算是搞懂GF后第一道符合我这个菜鸡水平的实战,可惜的是根本没意识到可以GF。A.Matching题目描述:整数模板是每位均为数字或问号的字符串。如果可以用数字替换模板中的每个问号,从而获得该正整数(严格大于\(0\))的十进制表示形式,且不带任何前导零,则该正整数......
  • Codeforces Round 874 (Div. 3) 题解
    A.MusicalPuzzle字符串\(s\)的不同的长度为\(2\)的子串个数就是答案可以用set处理B.RestoretheWeather将\(a\)数组排序后,在\(b\)数组中找到第一个大于等于\(a_i-k\)的元素与\(a_i\)对应即可可以用multiset实现(用multiset自带的lower_bound()比较好,......
  • Codeforces Round 878 (Div. 3) 题解
    A.CipherShifer从头开始扫一遍即可,扫到两个相同的表示某一个字符的解密结束B.BinaryCafe首先,我们不妨把题意转换为有多少种不同的花钱方案因为每一种咖啡就是一个二进制有\(k\)位的数字的其中一位,而对于不同的方案,其二进制位不完全相同,则每一个方案对应的花费一定不同,......
  • Docker使用WVP-Pro-GB28181网络视频平台
    1--Docker拉取镜像#镜像地址:docker镜像地址dockerpull648540858/wvp_prodockerrun--envWVP_IP="192.168.18.61"-it-p18080:18080-p30000-30500:30000-30500/udp-p30000-30500:30000-30500/tcp-p80:80-p5060:5060-p5060:5060/udp648540858/wvp_pro#利用i......
  • div左右两边50%拖拽功能
    <template><divid="app"><divclass="container"><divclass="left":style="{width:leftWidth+'%'}"><h1>LeftContent</h1></div><divclass="dragbar&q......
  • 【题解】Educational Codeforces Round 148(CF1832)
    A.NewPalindrome题目描述:给你一个由小写字母组成的回文字符串,问你是否能在重排其之后构造出另一个与原串不同的回文字符串。多测,\(t\le1000,2\le|s|\le50\)题目分析:考虑其实就是前\(\lfloor\frac{n}{2}\rfloor\)个位置存在两种或以上的不同字符,因为这样直接交换对......
  • Codeforces 1857E:Power of Points 区间?
    1857E.PowerofPointsDescription:\(n\)个数:\(x_1,···,x_n\),从左向右扫,当\(s=x_i\)时,可以将这\(n\)个数分为若干个闭区间\([s,x_1],[s,x_2],···,[s,x_n]\)(当然如果\(x_i<s\),则区间形如\([x_i,s]\))对于每一个\(s\in(x_1,···,x_n),\)有一个整数\(p\),记\(f_......
  • Codeforces Round 881 (Div. 3)
    A.SashaandArrayColoring为了让贡献最大,每种颜色只能染两个数显然这两个数为最大值与最小值、次大值与次小值、第三大值与第三小值……以此类推即可B.LongLong为了让和最大,我们需要的就是把所有负数变成正数那么第一问的答案就是\(\sum_{i=1}^n|a_i|\)此外,因为每次变......