• 寒假训练day2:Good Bye 2020


    A题:https://codeforces.com/contest/1466/problem/A

    题意:给出n个在x轴上的点的坐标,任意选择两点与(0,1)构成三角形,求三角形的可能面积总共有多少个?

    思路:由于点在x轴和y轴上,所以构成的三角形一定是个直角三角形,并且一条直角边是固定为1的,那么三角形的所有可能面积数就等于三角形所有可能的底边数,而我们可以通过枚举底边的所有可能,使用set进行一个去重,最后输出set的大小即可。

    代码:

    int n;    cin >> n;
    for(int i = 1; i <= n; i++) cin >> a[i];
    set<int> s;
    for(int i = 1; i <= n; i++)
      for(int j = i + 1; j <= n; j++)
        s.insert(a[i] - a[j]);
    cout << s.size() << endl;

    B题:https://codeforces.com/contest/1466/problem/B

    题意:给定一个数字序列,并且每个数字具有两种可能性,①保持不变,②在原有基础上+1,求解最多可以有多少个不同的数字?

    思路:既然是求最大有多少个不同元素,我们还是可以很自然的联想到使用STL中的Set,如果x没出现过,那么我们就将x插入到集合中,否则我们判断x+1是否出现过,没有出现我们就将x+1插入到集合中,否则不插入,最后set的大小即是答案。

    代码:

    set<int> ans;
    int n;    cin >> n;
    for(int i = 1; i <= n; i++) {
      int x;    cin >> x;
      if(ans.count(x) == 0) ans.insert(x);
      else if(ans.count(x + 1) == 0) ans.insert(x + 1);
    }
    cout << ans.size() << endl;

    C题:https://codeforces.com/contest/1466/problem/C

    题意:给定一个字符串,通过改变k个字符的值使得整个字符串在删除任意个首尾元素后不存在回文串,求需要改变多少次。

    思路:通过观察,我们可以发现只需要判断第i-1个字符和第i-2个字符是否于第i个字符相同,若相同,就需要将第i个字符改变,这是个结论,可以由归纳法证明。

    代码:

    void slove(string s) {
        int sum = 0;
        for(int i = 1; i < s.size(); i++) {
            if(s[i] == s[i - 1] || s[i] == s[i - 2]) {
                s[i] = ' ';
                sum++;
            }
        }
        cout << sum << endl;
        return ;
    } 

    E题:https://codeforces.com/contest/1466/problem/E

    题意:给出n个值,计算

    思路:这是一道需要化简的题,其实这个式子可以分解为其实这个式子可以分解为,并且可以分开计算,而还可以用二进制继续分解,分解方式为表示x[j]的第p位,因为每位之间互不干扰,就可以交换一下计算顺序,或运算同理。

    代码:

    void solve(){
        memset(cnt,0,sizeof(cnt));
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
        for(int i=1;i<=n;i++)
            for(int j=0;j<=60;j++)
                cnt[j]+=((a[i]>>j)&1);
        LL ans=0;
        for(int i=1;i<=n;i++){
            LL sumand=0,sumor=0;
            for(LL j=0,power=1;j<=60;j++,power=power*2%mod){
                if(a[i]>>j&1){
                    sumand=(sumand+power*cnt[j]%mod)%mod;
                    sumor=(sumor+power*n%mod)%mod;
                }
                else{
                    sumor=(sumor+power*cnt[j]%mod)%mod;
                }
            }
            ans=(ans+sumand*sumor%mod)%mod;
        }
        printf("%lld
    ",ans);
            
    }



  • 相关阅读:
    洛谷 P1443 马的遍历 BFS
    洛谷 P1583 魔法照片 快排
    洛谷 P1093 奖学金 冒泡排序
    洛谷 P3811 【模板】乘法逆元 如题
    洛谷 P3384 【模板】树链剖分 如题
    洛谷 P3379 【模板】最近公共祖先(LCA) 如题
    vijos 信息传递 tarjan找环
    洛谷 P3373 【模板】线段树 2 如题(区间加法+区间乘法+区间求和)
    酒厂选址
    ⑨要写信
  • 原文地址:https://www.cnblogs.com/ACM-Epoch/p/14219183.html
Copyright © 2020-2023  润新知