zoukankan      html  css  js  c++  java
  • 【洛谷】NOIP2018原创模拟赛DAY1解题报告

    点此进入比赛

    T1:小凯的数字

    题意:给定q个l,r,求l(l+1)(l+2)...(r-1)r模9的结果
    很显然,这是道考验数(运)学(气)的题目
    结论:输出((l+r)*(r-l+1)over2)(具体证明见比赛官方博客)
    需要注意的是不能直接乘,不然会爆long long
    而且,这道题卡快读。。。

    Code:

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    ll q,l,r;
    int main(){
    	scanf("%lld",&q);	
        for(ll i=1;i<=q;i++){
            scanf("%lld%lld",&l,&r);
            ll fir,scd;fir=l+r;scd=(r-l+1);
            if(fir%2==0)fir/=2;
            else scd/=2;
    		fir%=9;scd%=9;
            printf("%lld
    ",(fir*scd)%9);
        }
        return 0;
    }
    

    T2:密室

    题意:哈利和罗宾在一张无向图中,他们要到两个房间去,而其中有一些房间是只有哈利才能去的,最少需要多少时间,一共有n个点,m条边,k个只有哈里才能去的房间
    不难的图论题,显然只存在几种情况,
    要么哈利到A,罗宾到B 要么哈利到B,罗宾到A
    还有一种就是哈利一个人走过两个房间(因为罗宾能走的路哈利都能走,而哈利走的路罗宾不一定都能走,所以一个人走,哈利绝不会比罗宾慢)
    所以,只要找这几条最短路就可以了
    1.哈利到房间A,房间B的最短路n
    2.罗宾到房间A,房间B的最短路
    3.哈利从房间A到房间B的最短路

    Code:

    #include<bits/stdc++.h>
    #include<queue>
    #define N 200001
    using namespace std;
    int n,m,k,ed1,ed2,cnt,head[N],v[N],dis[N],snake[N];
    struct Edge{
        int nxt,to,val;
    }tree[N];
    void read(int &x){
        char ch; bool ok;
        for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar()) if(ch=='-') ok=1;
        for(x=0; isdigit(ch); x=x*10+ch-'0',ch=getchar()); if(ok) x=-x;
    }
    void add(int a,int b,int c){
        ++cnt;
        tree[cnt].nxt=head[a];
        tree[cnt].to=b;
        tree[cnt].val=c;
        head[a]=cnt;
    }
    void spfa1(int v0){
        for(int i=1;i<=n;i++)dis[i]=1000000001,v[i]=0;
        queue<int>q;
        q.push(v0);v[v0]=1;dis[v0]=0;
        while(q.size()){
            int x=q.front();q.pop();v[x]=0;
            for(int i=head[x];i;i=tree[i].nxt){
                int j=tree[i].to;
                if(dis[j]>dis[x]+tree[i].val){
                    dis[j]=dis[x]+tree[i].val;
                    if(!v[j])q.push(j),v[j]=1;
                }
            }
        }
    }
    void spfa2(int v0){
        for(int i=1;i<=n;i++)dis[i]=1000000001,v[i]=0;
        queue<int>q;
        q.push(v0);v[v0]=1;dis[v0]=0;
        while(q.size()){
            int x=q.front();q.pop();v[x]=0;
            for(int i=head[x];i;i=tree[i].nxt){
                int j=tree[i].to;
                if(!snake[j]&&dis[j]>dis[x]+tree[i].val){
                    dis[j]=dis[x]+tree[i].val;
                    if(!v[j])q.push(j),v[j]=1;
                }
            }
        }
    }
    int main(){
        read(n),read(m),read(k);
        for(int i=1;i<=k;i++){
            int s;read(s);snake[s]=1;
        }
        for(int i=1;i<=m;i++){
            int a,b,c;
            read(a),read(b),read(c);
            add(a,b,c);add(b,a,c);
        }
        read(ed1),read(ed2);
        spfa1(1);
        int hd1=dis[ed1],hd2=dis[ed2];
        spfa1(ed1);int hd12=dis[ed2];
        spfa2(1);
        int rd1=dis[ed1],rd2=dis[ed2];
        int ans1=min(hd1,hd2)+hd12;int ans2=min(max(hd1,rd2),max(hd2,rd1));
        printf("%d",min(ans1,ans2));
        return 0;
    }
    
    

    T3:PION贪吃蛇

    不会。。。

  • 相关阅读:
    LC 155 Min Stack
    TUM 慕尼黑工业大学 MSEI 课程结构介绍 ws19/20
    C++ MinGW 配合 Sublime Text 搭建
    LC 752 Open the Lock
    LC 200 Number of Islands
    Python lambda
    关于无法连接网络安装VisualVM解决方案
    二叉堆的解读
    哈希表的实现
    红黑树解读
  • 原文地址:https://www.cnblogs.com/NLDQY/p/10712974.html
Copyright © 2011-2022 走看看