Hello 2020补题


题目

A. New Year and Naming

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
string s1[25],s2[25];
int main(){
    ll n,m,q;
    scanf("%lld%lld",&n,&m);
    for(int i=1;i<=n;i++){
        cin>>s1[i];
    }
    for(int i=1;i<=m;i++){
        cin>>s2[i];
    }
    scanf("%lld",&q);
    while(q--){
        ll k;
        scanf("%lld",&k);
        cout<<s1[(k-1)%n+1]<<s2[(k-1)%m+1]<<endl;
    }
}

B. New Year and Ascent Sequence

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF=0x3f3f3f3f;
const ll MAXN=1e5+10;
ll a[MAXN];
vector<ll>MIN,MAX;
int main(){
    ll n;
    scanf("%lld",&n);
    ll ex=0;
    for(ll i=1;i<=n;i++){
        ll k;
        scanf("%lld",&k);
        ll Min=INF;
        ll Max=-1;
        bool flag=false;
        for(int j=1;j<=k;j++){
            scanf("%lld",&a[j]);
        }
        for(ll j=1;j<=k;j++){
            if(a[j]>Min){
                ex++;
                flag=true;
                break;
            }
            Min=min(Min,a[j]);
            Max=max(Max,a[j]);
        }
        if(!flag){
        MIN.push_back(Min);
        MAX.push_back(Max);
        }
    }
    ll ans=0;
    sort(MIN.begin(),MIN.end());
    sort(MAX.begin(),MAX.end());
    for(auto it=MIN.begin();it!=MIN.end();it++){
    ll dis=MAX.end()-upper_bound(MAX.begin(),MAX.end(),*it);
    ans+=dis;
    }
    ans+=ex*n+ex*(n-ex);
    cout<<ans<<endl;
}

C. New Year and Permutation

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn=250000+10;
ll p[maxn];
int main(){
    ll n,mod;
    scanf("%lld%lld",&n,&mod);
    p[0]=1;
    for(ll i=1;i<=n;i++){
        p[i]=p[i-1]*i%mod;
    }
    ll ans=0;
    for(ll i=1;i<=n;i++){
        ans=(ans+(((n-i+1)*p[i]%mod)*p[n-i+1]%mod))%mod;
    }
    printf("%lld\n",ans);
    return 0;
}

D. New Year and Conference

按sa,ea排序,判断事件在a道相交时在b道是否一定相交,然后反过来判断在b道相交时在a道是否一定相交
判断方法为建立两个集合,分别存放b道的开始时间和结束事件,按照排序好的时间顺序,通过扫描线,在加入a道开始点的时候,分别在两个在集合中加入对应地b道的事件开始点和结束点,扫描到a道结束点的时候删除两个集合中b道对应的点。

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int sa[maxn],sb[maxn],ea[maxn],eb[maxn];
int n;
bool solve(){
 
    vector<pair<int,int> >vec;
    for(int i=1;i<=n;i++){
        vec.push_back(make_pair(sa[i],-i));
        vec.push_back(make_pair(ea[i],i));
    }
    sort(vec.begin(),vec.end());
    multiset<int>s,e;
    for(int i=0;i<vec.size();i++){
        if(vec[i].second<0){
            s.insert(sb[-vec[i].second]);
            e.insert(eb[-vec[i].second]);
            if(s.size()&&(*s.rbegin()>eb[-vec[i].second]||*e.begin()<sb[-vec[i].second]))
                return false;
        }
        else{
            s.erase(s.find(sb[vec[i].second]));
            e.erase(e.find(eb[vec[i].second]));
        }
    }
    return true;
}
int main(){
 
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d%d%d%d",&sa[i],&ea[i],&sb[i],&eb[i]);
    }
    bool flag=true;
    if(!solve())
    flag=false;
    swap(sa,sb);
    swap(ea,eb);
    if(!solve())
    flag=false;
    if(flag)
        puts("YES");
    else
        puts("NO");
}

E. New Year and Castle Construction

计算几何不是特别懂,但要学会极角排序呢,很重要的。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5;
const long double pi=acos(-1.0L);
struct node{
    int x,y;
}p[maxn];
vector<long double>vec;
int main(){
    ll n;
    scanf("%lld",&n);
    for(int i=0;i<n;i++){
        scanf("%lld%lld",&p[i].x,&p[i].y);
    }
    ll ans=n*(n-1)*(n-2)*(n-3)*(n-4)/24;
    for(ll i=0;i<n;i++){
        vec.clear();
        for(int j=0;j<n;j++){
                if(i!=j){
                    long double tmp=atan2(p[j].x-p[i].x,p[j].y-p[i].y);
                    vec.push_back(tmp);
                    vec.push_back(tmp+2*pi);
                }
        }
         sort(vec.begin(),vec.end());
        for(ll j=0;j<n-1;j++){
            ll p=lower_bound(vec.begin(),vec.end(),vec[j]+pi)-vec.begin()-j;
            ans-=(p-1)*(p-2)*(p-3)/6;
        }
    }
    cout<<ans<<endl;
}
发布了29 篇原创文章 · 获赞 4 · 访问量 686

猜你喜欢

转载自blog.csdn.net/qq_44290978/article/details/103949325