• Codeforces Round #678 (Div. 2)


    Codeforces Round #678 (Div. 2)

    T1 Reorder
    mean
    \(\quad\)给你一些整数,让你随便排序,求\(\Sigma_{i = 1}^{n}{\Sigma_{j = i}^{n}{\frac{a_j}{j}}}\)能否等于\(m\)

    idea
    \(\quad\)考虑抵消,其实就问\(\Sigma_{i = 1}^{n}{a_i}\)是否会等于\(m\)

    code

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cmath>
    #include<ctime>
    #include<climits>
    #include<sstream>
    using namespace std;
    int main()
    {
      int t;
      cin >> t;
      while(t--)
      {
        int n , m;
        cin >> n >> m;
        int sum = 0;
        for(register int i = 1 ; i <= n ; i++)
        {
          int c;
          cin >> c;
          sum += c;
        }
        if(sum == m){cout << "YES" << endl;}
        else{cout << "NO" << endl;}
      }
      return 0;
    }
    

    T2 Prime Square
    mean
    \(\quad\)给你一个正整数\(n\),要求你输出一个\(n * n\)的矩阵,满足每个数都是非质数,所有行列之和为质数。

    idea
    \(\quad\)考虑在对角线填数,其余上1,暴力模拟要上那个数就好了。

    code

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cmath>
    #include<ctime>
    #include<climits>
    #include<sstream>
    using namespace std;
    
    const int N = 1e5 + 10;
    bool book[N] ; int tot = 0 ; int p[N];
    void build()
    {
      for(register int i = 2 ; i <= 1e5 ; i++)
      {
        if(book[i] == 1){continue;}
        tot++ ; p[tot] = i;
        for(register int j = i + i ; j <= 1e5 ; j += i)
        {
          book[j] = 1;
        }
      }
    }
    
    int main()
    {
      int t;
      cin >> t;
      build();
      while(t--)
      {
        int n;
        cin >> n;
        int m = 1;
        for(register int i = 1 ; i <= tot ; i++){if(p[i] >= n){if(book[p[i] - n + 1]){m = p[i] ; break;}}}
        m = m - n + 1;
        if(book[n] == 0){m = 1;}
        for(register int i = 1 ; i <= n ; i++)
        {
          for(register int j = 1 ; j <= n ; j++)
          {
            if(i == j){cout << m << " ";}
            else{cout << 1 << " ";}
          }
          cout << endl;
        }
      }
      return 0;
    }
    

    T3 Binary Search
    mean
    \(\quad\)给你一串二分查找的代码,有一个长\(n\)的数列,有一个元素\(x\),在位置\(pos\),问这个数列有多少可能的形式,答案对\(1e9 + 7\)取膜。

    idea
    \(\quad\)考虑复现这个过程,在需要大于\(x\)的地方计数,再在需要小于\(x\)的地方计数,最后再在随便取的地方计数,乘起来就是答案。说具体一点:

    • 在当前元素需要小于\(x\)的位置求所有小于\(x\)的元素在此的排列方案
    • 在当前元素需要大于\(x\)的位置求所有大于\(x\)的元素在此的排列方案
    • 在当前元素可以随便取的位置求剩余元素(除\(x\))外的排列方案

    code

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cmath>
    #include<ctime>
    #include<climits>
    #include<sstream>
    using namespace std;
    #define int long long
    
    const int Mod = 1e9 + 7;
    
    int L , R;
    void check(int n , int p)
    {
      int l = 0 , r = n;
      while(l < r)
      {
        int mid = (l + r) / 2;
        if(mid <= p){l = mid + 1 ; if(mid != p){L++;}}
        else{r = mid ; R++;}
      }
    }
    
    signed main()
    {
      int n , x , p;
      cin >> n >> x >> p;
      check(n , p);
      int ans = 1;
      for(register int i = 1 ; i <= L ; i++){ans *= x - i ; ans %= Mod;}
      for(register int i = 1 ; i <= R ; i++){ans *= n - x - i + 1 ; ans %= Mod;}
      for(register int i = 1 ; i <= n - L - R - 1 ; i++){ans *= i ; ans %= Mod;}
      cout << ans;
      return 0;
    }
    
  • 相关阅读:
    JavaScript—飞机大战
    JavaScript—瀑布流
    JavaScript—原生轮播和无缝滚动
    JavaScript—封装animte动画函数
    JavaScript—offset、client、scroll
    JavaScript—对象创建方式
    JavaScript—var lef const区别
    P1352 没有上司的舞会 题解
    P1829 [国家集训队]Crash的数字表格 / JZPTAB 题解
    P2522 [HAOI2011]Problem b 题解
  • 原文地址:https://www.cnblogs.com/wanwanjiuhao7744/p/13888009.html
Copyright © 2020-2023  润新知