首页 > 其他分享 >Educational Codeforces Round 104

Educational Codeforces Round 104

时间:2023-08-02 17:45:12浏览次数:47  
标签:Educational int auto Codeforces long cin -- cnt 104

https://codeforces.com/contest/1487

A. Arena

统计与最小值不同的数字数量。

#include <bits/stdc++.h>

using namespace std;

#define int long long

const int M = (1 << 15) - 1;

void solve(){
    int n;
    cin >> n;
    vector<int> a(n);
    for( auto &i : a )
        cin >> i;
    sort(a.begin(), a.end());
    for( auto i : a ){
        if( i != a[0] ) break;
        n --;
    }
    cout << n << "\n";
}

int32_t main() {
    ios::sync_with_stdio(false), cin.tie(nullptr);
    int t;
    cin >> t;
    while( t -- )
        solve();
    return 0;
}

B. Cat Cycle

首先如果\(n\)是偶数,则\(A,B\)不会相遇。当\(n\)是奇数是,\(B\)每一圈都多走了 1 步,这里的一圈是指圈上所有的点被覆盖过一次,并且每\(\frac{n}{2}\)步可以完整的覆盖一次。所以计算完整覆盖了多少次即可。

#include <bits/stdc++.h>

using namespace std;

#define int long long

const int M = (1 << 15) - 1;

void solve() {
    int n, k, f;
    cin >> n >> k, k -- , f = n / 2;
    cout << (k + (n % 2) * (k / f)) % n + 1 << "\n";
}

int32_t main() {
    ios::sync_with_stdio(false), cin.tie(nullptr);
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

C. Minimum Ties

首先,当\(n\)为奇数的时候,每只球队需要参与偶数场比赛,所以不用平局,反之每只球队至少产生一次平局。

我们保证球队\(i\)赢\(j\)在\(2(j-i)<n\)即可。

当然本题构造方法有很多种。

#include <bits/stdc++.h>

using namespace std;

#define int long long

void solve(){
    int n;
    cin >> n;
    for( int i = 1 ; i <= n ; i ++ )
        for( int j = i+1 ; j <= n ; j ++ ){
            if( 2*(j-i) == n ) cout << "0 ";
            else if( 2*(j-i) < n ) cout <<"1 ";
            else cout << "-1 ";
        }
    cout << "\n";
    return ;
}

int32_t main() {
    ios::sync_with_stdio(false), cin.tie(nullptr);
    int t;
    cin >> t;
    while( t -- )
        solve();
    return 0;
}

D. Pythagorean Triples

我们要找同时满足\(1\le a\le b \le c \le n , a^2+b^2=c^2,a^2-b=c\)

的\((a,b,c)\)的数量,首先把两个等式作差可以得到\(b^2+b=c^2-c\)则\(b(b+1)=c(c-1)\),所以\(c=b+1\)

带回原式可得\(a^2=2b+1\)因为\(b\le n\)所以\(a^2=2b+1\le 2n+1\)。这样我们\(O(\sqrt n)\)的求出所有符合条件的\(a\)即可,当然也可以用数学方法\(O(1)\)的解出答案。

另外一点要注意的是\(a^2=2b+1\),所以\(a\)一定是奇数。

#include <bits/stdc++.h>

using namespace std;

#define int long long

void solve(){
    int n , res = 0;
    cin >> n;
    for( int i = 3 , N = 2*n-1; i * i <= N ; i += 2 )
        res ++;
    cout << res << "\n";
}

int32_t main() {
    ios::sync_with_stdio(false), cin.tie(nullptr);
    int t;
    cin >> t;
    while( t -- )
        solve();
    return 0;
}

E. Cheap Dinner

设\(f[i][j]\)表示第\(i\)种菜,选择\(j\)的最小代价,则转移方程就是\(f[i][j]=\min f[i-1][k] + a[i][j],(k,j)\notin\{(x_{i-1},y_{i-1})\}\),这样的话实际上转换成了一个带修改的 RMQ问题,并且每次询问的区间都是完整的区间,当然我们可以使用各种数据结构来解决这个问题。

这里我们 multiset 来维护\(f[i-1][k]\)的最小值,每次枚举点后,把所有不能转移过来的点删掉,计算答案后再重新加回去,复杂度\(O(m\log n)\)。

#include <bits/stdc++.h>

using namespace std;


#define int long long
const int inf = 1e18;

int32_t main() {
    ios::sync_with_stdio(false), cin.tie(nullptr);
    vector<int> n(4);
    for (auto &i: n) cin >> i;
    vector<vector<int>> a(4);
    for (int i = 0; i < 4; i++) {
        a[i] = vector<int>(n[i]);
        for (auto &j: a[i]) cin >> j;
    }
    for (int i = 1, m; i < 4; i++) {
        cin >> m;
        vector<vector<int>> e(n[i] + 1);
        for (int x, y; m; m--)
            cin >> x >> y, x--, y--, e[y].push_back(x);
        multiset<int> cnt;
        for (auto j: a[i - 1])
            cnt.insert(j);
        for (int j = 0; j < n[i]; j++) {
            for (auto k: e[j])
                cnt.erase(cnt.lower_bound(a[i - 1][k]));
            if (cnt.empty()) a[i][j] = inf;
            else a[i][j] += *cnt.begin();
            for (auto k: e[j])
                cnt.insert(a[i - 1][k]);
        }
    }
    int res = *min_element(a[3].begin(), a[3].end());
    if( res >= inf ) res = -1;
    cout << res;
    return 0;
}

标签:Educational,int,auto,Codeforces,long,cin,--,cnt,104
From: https://www.cnblogs.com/PHarr/p/17601349.html

相关文章

  • Educational Codeforces Round 88
    A.BerlandPoker先尽可能的吧小丑给一个人,在把剩下的小丑尽可能的平分,最后计算差值即可。#include<bits/stdc++.h>usingnamespacestd;voidsolve(){intn,m,k,t;cin>>n>>m>>k,t=n/k;inta=min(m,t);m-=a,k--;intb=(m......
  • Codeforces Round 889 (Div. 2) A-E
    传送门,不用谢。A给出排列每次可以交换两个数字,求最少多少次使得排列为错排。考虑在原位的数字个数为\(cnt\)则答案显然为\((cnt+1)>>1\)B求一个最大区间满足其中说有数字被\(n\)整除极其有趣,注意到样例解释具有迷惑性。考虑一个序列\([l,r]\)为答案那么从中可以看出\(1|n......
  • 振弦传感器信号转换器(VTI104_DIN)应用岩土工程监测
    振弦传感器信号转换器(VTI104_DIN)应用岩土工程监测振弦传感器信号转换器(VTI104_DIN)是一种用于实现振弦传感器信号转换的设备,可将振弦传感器所采集到的振动信号转换成电信号,并通过模拟量输出或数字量输出的方式进行传输和记录。在岩土工程监测中,振弦传感器信号转换器广泛应用于地震......
  • 工程监测仪器振弦传感器信号转换器(VTI104_DIN)
    工程监测仪器振弦传感器信号转换器(VTI104_DIN)振弦传感器信号转换器,简称VTI104_DIN,是一种用于转换振弦传感器信号的电子设备。该设备可以将振弦传感器产生的模拟信号转换成标准的电压或电流输出,从而使其可以连接到PLC、DCS、PC等控制系统中,实现自动控制、数据采集和处理等功能。......
  • Educational Codeforces Round 152 (Rated for Div. 2)
    Preface经典秒完SB题然后开始坐牢1h,写了个E的假算法T在24个点就不管了打lol去了妈的怎么稍微难点的题就是想不到呢A.MorningSandwich签到#include<cstdio>#include<iostream>#include<utility>#include<vector>#include<cstring>#include<cmath>#include<cstdlib>......
  • Codeforces Round 889 (Div. 2)
    CodeforcesRound889(Div.2)T1​ 思路:我们将\(i\nep_i\)的数量记下来,再判断这个数的奇偶性,如果为偶,那么答案就为这个数/2,如果为奇,那么就是这个数/2+1。T2​ 思路:我们枚举\(1\simn\),我们记录连续是\(n\)的因数的个数,如果不连续了就\(break\),答案就是个数......
  • Codeforces Round 885 (Div. 2)
    CodeforcesRound885(Div.2)A.VikaandHerFriends题目大意太长了click思路可以手动模拟一下,可以发现当两个人的\(x+y\)值就行相同的就能抓到了#include<bits/stdc++.h>usingnamespacestd;intmain(){intT;cin>>T;while(T--){......
  • Codeforces Round 887 (Div. 2)
    CodeforcesRound887(Div.2)A.Desorting题目大意给出一个长度为\(n\)的数组\(a\),可以执行这个操作任意次。选择一下标\(i\),使得\(a_{1...i}\)加上\(1\),\(a_{i+1...n}\)减少\(1\)。问最少几次操作使得数组\(a\)无序。思路首先如果\(a\)原本就无序的......
  • Codeforces Round 885 (Div. 2) 题解
    A.VikaandHerFriends看一下样例就可以发现,Vika以及她的朋友都不能走对角线,在这种情况下Vika和朋友的距离为偶数,且朋友一定追不上Vika所以直接判断Vika和朋友的距离是否都为偶数即可B.VikaandtheBridge显然贪心,枚举颜色,找到相邻距离最大的两块木板,记该距离为\(......
  • Practice on Codeforces and Atcoder in May
    CF补题题解2023.5说明:CF题直接去luogu看翻译,AT题会附上简要题意CF1821E先考虑如何高速计算权值一个显而易见的贪心是尽量在右边取括号消除,设右括号为1,左括号为-1那么我们每一次消除的括号\(i,i+1\)都满足了\(i+1\)的右边剩下的全部是右括号,代价就是往右数的个数更进一......