首页 > 其他分享 >Codeforces Round 618 (Div. 2)

Codeforces Round 618 (Div. 2)

时间:2023-07-27 13:45:40浏览次数:48  
标签:618 cout int Codeforces second solve Div pi first

Codeforces Round 618 (Div. 2)

https://codeforces.com/contest/1300

A. Non-zero

要求和,积都不为0,则先把全部0操作一次,然后再check 和是否为0,是的话再对任意数操作一次即可。

#include <bits/stdc++.h>

using namespace std;
const int N = 105;
int n, x, s, ans;

void solve () {
    s = ans = 0;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> x, s += x;
        if (x == 0)  ans++, s++;
    }
    if (s == 0)     ans++;
    cout << ans << endl;
}

int main () {
    int t;
    cin >> t;
    while (t--)     solve ();
}

//不能有0

B. Assigning to Classes

排序后 \(a_{n+1}-a_n\) 即为答案

#include <bits/stdc++.h>

using namespace std;
const int N = 2e5 + 5;
int n, a[N];

void solve () {
    cin >> n;
    //n *= 2;
    for (int i = 1; i <= n * 2; i++)    cin >> a[i];
    sort (a + 1, a + n * 2 + 1);
    cout << a[n+1] - a[n] << endl;
}

int main () {
    int t;
    cin >> t;
    while (t--)     solve ();
}

C. Anu Has a Function

按位考虑,将 \(x,y\) 该位上所有数字的可能组合列出来可以发现:

只有 \(x=1,y=0\) 时最终答案才为1。
而上述操作,即 \(1|0-0\) 的最终结果是1,等价于把一个 \(1\) 和一个\(0\) 合并成了一个 \(1\),即消耗了一个0。所以形如 \(10000\) 的操作,最终结果是1。而如果有一个以上 \(1\),如 \(1100000\),到倒数第二步一定会剩下两个 \(1\),再合并就会变为 \(0\)。
因此 \(n\) 个数中,该位为 \(1\) 的数只能有一个(才能使得最终结果为 \(1\))

故从高位往低位判断,如果找到一个符合上述条件的数就把那个 \(1\) 放在第一位,而剩下的数随便排就行了。

证明为什么只用管第一个数:

如上图,假设我们找到了箭头所指位为答案,考虑下一位:

  1. 第一个数的下一位为 \(0\),那么该位答案一定为0,不论后面安排;
  2. 第一个数下一位为 \(1\),且其它数的下一位都为 \(0\),则该位为 \(1\),最大;
  3. 第一位数的下一位为 \(1\),且其它数的下一位也有 \(1\),则该位为 \(0\);
    可见后面数的安排是无法对原有答案造成影响的,所以只排第一个数即可。
#include <bits/stdc++.h>

using namespace std;
const int N = 1e5 + 5;
int n, a[N], b[N];

void solve () {
    int f1 = 1;
    cin >> n;
    for (int i = 1; i <= n; i++)    cin >> a[i];
    for (int j = 30; j >= 0; j--) {
        int cnt = 0; //当前位为1的数量
        for (int i = 1; i <= n; i++) {
            if (a[i] >> j & 1) {
                f1 = i, cnt++;
            }
            if (cnt > 1)    break;
        }
        if (cnt == 1)    break;
    }
    cout << a[f1] << ' ';
    for (int i = 1; i <= n; i++)    if (i != f1)    cout << a[i] << ' ';
    cout << endl;
}

int main () {
    solve ();
    //cout << log2 (1e9);
}

//1的个数=1且0的个数>0, 当前位才是1,否则都是0
//然后把最高位的1放在前面就行

D. Aerodynamic

观察几个样例可以发现,其实这题就是要找两边对应平行且相等的图形,即中心对称图形。即对应点的中点都在同一点上。
注意输入已经排好序了,直接将 \(i\) 与 \(\frac n2 + i\) 对应起来就行

#include <bits/stdc++.h>
#define db double
#define x first
#define y second

using namespace std;
typedef pair<db, db> pii;
const int N = 2e5 + 5;
int n;
pii p[N];

void solve () {
    cin >> n;
    for (int i = 1; i <= n; i++)    cin >> p[i].x >> p[i].y;
    if (n & 1)  cout << "NO\n";
    else {
        //判断中点是否相等
        n /= 2;
        db xx = (p[1].x + p[n+1].x) / 2, yy = (p[1].y + p[n+1].y) / 2;
        for (int i = 2; i <= n; i++) {
            db px = (p[i].x + p[n+i].x) / 2, py = (p[i].y + p[n+i].y) / 2;
            if (px != xx || py != yy) {
                cout << "NO\n";
                return ;
            }
        }
        cout << "YES\n";
    }
}

int main () {
    solve ();
}

//必须为偶数,且对边相等并平行
//中心对称图形

E. Water Balance

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

using namespace std;
typedef pair<ll, ll> pii;
int n;
vector<pii> v; //单调栈{sum, len}

int main () {
    scanf ("%d", &n);
    while (n--) {
        ll x;
        scanf ("%lld", &x);
        pii pi = {x, 1ll};
        while (v.size () && v[v.size ()-1].first * pi.second >= v[v.size ()-1].second * pi.first) {
            pi.first += v[v.size ()-1].first, pi.second += v[v.size ()-1].second;
            v.pop_back ();
        }
        v.push_back (pi);
    }
    for (auto pi : v) {
        ll sum = pi.first, len = pi.second;
        //cout << sum << ' ' << len << endl;
        double aver = 1.0 * sum / len;
        while (len--)   printf ("%.11f\n", aver);
    }
}

标签:618,cout,int,Codeforces,second,solve,Div,pi,first
From: https://www.cnblogs.com/CTing/p/17584591.html

相关文章

  • Codeforces Round 888 (Div. 3) A-F
    A.EscalatorConversations题意:有一个扶梯,有n个人要站扶梯,这个扶梯有m个位置,第i个位置的高度为i*k,Vlad高H,第i个人高h[i],当且仅当两个人所处的位置高度加上自身身高刚好相同时才能谈话,问能和Vlad谈话的有多少人。Solution直接计算即可voidsolve(){ intn,m,k,H;cin>>n>>m>>......
  • Codeforces Round 888 (Div. 3) - D
    目录D.PrefixPermutationSumsCodeforcesRound888(Div.3)赛后摘记D.PrefixPermutationSums题意判断给定的长为n-1数组,是否为某个1~n的序列的前缀和数组漏了一个数形成的数组思路就是判断能否变回去,毫无感情的判断机器法一:统计给定前缀和数组的差分数组得......
  • Codeforces Round 888 (Div. 3)
    A.EscalatorConversations#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongvoidsolve(){intn,m,k,H;cin>>n>>m>>k>>H;vector<int>h(n);intres=0;for(inth,......
  • Codeforces Round 888 (Div. 3)F(异或小技巧)
    题意:给你一个数组长度为n的a数组,要求a数组的值为非负整数,再给你一个k,a的值全小于2的k次方,找到一个小于a的k次方的值x,再从a中找到两个值,让他们(ai⊕x)&(aj⊕x)最小结论:n个数的最小异或对的答案就是排序后最小的相邻异或和思路:(ai⊕x)&(aj⊕x)的最高位为1,可以把它先转换成二进制......
  • 【题解】Educational Codeforces Round 150(CF1841)
    赛时过了A-E,然后就开摆了,为什么感觉C那么无厘头[发怒][发怒]排名:25thA.GamewithBoard题目描述:Alice和Bob玩游戏,他们有一块黑板。最初,有\(n\)个整数\(1\)。Alice和Bob轮流操作,Alice先手。轮到时,玩家必须在棋盘上选择几个(至少两个)相等的整数,擦除它们,然后写一个......
  • Codeforces 1852A Ntarsis' Set 题解
    题目传送门:Codeforces1852ANtarsis'Set题意给定一个集合,里面初始有\(1,2,3...10^{1000}\),告诉你每天会拿掉其中的第\(a_1,a_2,a_3...a_n\)个,询问这样的\(k\)天之后剩下的最小的数是多少。分析思考如果\(x\)在这天没有被删掉,那么哪些被删掉的位置会对它产生什么......
  • Codeforces Round 886 (Div. 4) D - H
    D.BalancedRoundProblem-D-Codeforces双指针,贪心题意:​ 给出\(n\)个数,我们可以删去其中若干个数,使得删完后的数重新排列任意相邻的数之差绝对值不超过\(k\),输出最小删去数的个数思路:​ 很明显可以先将给出的数组进行排序。对于排序后的数组,我们可以将其分为若干个相邻......
  • CodeForces 725F Family Photos
    洛谷传送门CF传送门不错的贪心题。我们考虑一对照片只有一张的情况。那么先后手会按照\(a+b\)降序取。因为若\(a_i+b_i\gea_j+b_j\),变形得\(a_i-b_j\gea_j-b_i\)且\(b_i-a_j\geb_j-a_i\),所以对于双方先取\(i\)一定是不劣的。回到原题,如果\(a_{i......
  • Codeforces Round 887 (Div. 2) A-D
    CodeforcesRound887(Div.2)A.Desorting题意:给出一个数组,可以进行任意次以下操作:选择一个i对于数组中的a[1],a[2],...,a[i]全部+1a[i+1]...a[n]全部-1,问最小使得数组变得无序的操作是多少次Solution直接找相邻的两个数的最小的差值即可voidsolve(){ intn;cin>>n......
  • Educational Codeforces Round 71 (Rated for Div. 2)
    EducationalCodeforcesRound71(RatedforDiv.2)A-ThereAreTwoTypesOfBurgers思路:价格高的优先取#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong//#defineint__int128typedefpair<int,int>PII;typedefpair<string,int&......