zoukankan      html  css  js  c++  java
  • 2021.01.28 Rating赛 解题/补题报告

    A

    用一个数组标记一下出现的数字,按顺序输出出现过的数字

    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int n,m,a[20],b[20]={0},f=0,i,x;
        cin>>n>>m;
        for(i=0;i<n;i++){
            cin>>a[i];
        }
        for(i=0;i<m;i++){
            cin>>x;
            b[x]=1;
        }
        for(i=0;i<n;i++){
            if(f==0&&b[a[i]]==1){
                cout<<a[i];
                f=1;
            }else if(b[a[i]]==1){
                cout<<" "<<a[i];
            }
        }
        return 0;
    }

    B

    比赛的时候没理清楚( ‘-ωก̀ )

    先按力量排序,力量最小的一个也打不过,结果就是他自己本来有的金钱,

    算完的把金钱再放入set中,保证set中的力量都比这个小

    其他的从set中找k个最大的,加在ans上

    最后按id排序恢复原来的顺序,输出

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    struct people{
    int id,p,c;
    ll ans;
    }a[100005];
    /*
    id 初始序号
    p  力量
    c  初始金钱
    ans 结果(初始金钱
    */
    bool cmp(people a,people b){ if(a.p==b.p){ return a.c<b.c; }else{ return a.p<b.p; } } bool cmp1(people a,people b){ return a.id<b.id; } int main() { int n,k,i; cin>>n>>k; for(i=0;i<n;i++){ cin>>a[i].p; } for(i=0;i<n;i++){ cin>>a[i].c; a[i].ans=a[i].c; a[i].id=i; } sort(a,a+n,cmp); multiset<int, greater<int> > s;//从大到小 for(i=0;i<n;i++){ int cnt=0; for(auto j: s){ if(cnt++>=k){ break; } a[i].ans+=j; } s.insert(a[i].c); } sort(a,a+n,cmp1); for(i=0;i<n;i++){ cout<<a[i].ans<<" "; } return 0; }

    c

    参考大佬代码( ‘-ωก̀ )

    题意,两个正方形是否相交

    题解:1.用叉积判断边是否相交

       2.判断A的中心是否在B内或者B的中心是否在A内

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int x[3][5],y[3][5];//两个正方形的坐标(x,y)
    pair<int,int> p[3][4];
    int cross(pair<int,int> a,pair<int,int> b,pair<int,int> c)//叉积
    {
        return (b.first-a.first)*(c.second-a.second)-(c.first-a.first)*(b.second-a.second);
    }
    int ok(int i,int j)
    {
        int k;
        for(k=0; k<4; k++)
        {
            if (cross (p[i][0], p[i][1], p[j][k]) *cross (p[i][2], p[i][3], p[j][k]) >= 0 &&
                    cross (p[i][1], p[i][2], p[j][k]) *cross (p[i][3], p[i][0], p[j][k]) >= 0)//判断相交
            {
                return 1;
    
            }
        }
        pair<int,int> px;//中心
        px.first=(p[j][0].first + p[j][2].first) / 2;
        px.second=(p[j][1].second + p[j][3].second) / 2;
        if(cross (p[i][0], p[i][1], px) *cross (p[i][2], p[i][3], px) >= 0 &&
                cross (p[i][1], p[i][2], px) *cross (p[i][3], p[i][0], px) >= 0)
        {
            return 1;
        }
        return 0;
    
    }
    int main()
    {
        int n,i;
        for(i=0;i<4;i++){
            cin>>x[1][i]>>y[1][i];
            p[1][i]=pair<int,int>(x[1][i],y[1][i]);
        }
        for(i=0;i<4;i++){
            cin>>x[2][i]>>y[2][i];
            p[2][i]=pair<int,int>(x[2][i],y[2][i]);
        }
        if(ok(1,2)==0&&ok(2,1)==0){
            cout<<"NO"<<endl;
        }else{
            cout<<"YES"<<endl;
        }
        return 0;
    }
  • 相关阅读:
    sublime中node测试环境
    常用的win dos命令
    html area图片热点
    Git常用指令整理(Git Cheat Sheet)
    Java研发技术学习路线
    编程+工具基础教程|网站整理
    廖雪峰 Git 教程 + Git-Cheat-Sheet 学习总结
    现成的HTML5框架
    记录下自己学习的点滴-开始写博客
    linux查看日志文件
  • 原文地址:https://www.cnblogs.com/a-specter/p/14354619.html
Copyright © 2011-2022 走看看