DAY 6考试

DAY 6考试

题解:

这题太水辣

注意开 long long

但我不是没开long long 的锅

我是DAY 6考试

输出 long long 要用 lld 啊

大梦身先醒,80可海星 

 

PS:百度了一下 long (ld) 和 int(d) 的区别,以前有大区别,现在没了

 

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#include<queue>
#include<cstdlib>

using namespace std;

#define ll long long

inline ll read()
{
    ll ans=0;
    char last=' ',ch=getchar();
    while(ch<'0'||ch>'9') last=ch,ch=getchar();
    while(ch>='0'&&ch<='9') ans=ans*10+ch-'0',ch=getchar();
    if(last=='-') ans=-ans;
    return ans;
}

ll a,b;
ll x,y,z;

ll gcd(ll aa,ll bb)
{
    if(bb==0) return aa;
    return gcd(bb,aa%bb);
}

int main()
{
    freopen("a.in","r",stdin);
    freopen("a.out","w",stdout);
    a=read();b=read();
    x=gcd(a,b);
    y=a*b/x;
    z=x^y;
    printf("%lld\n",z);  //long long是lld 
    return 0;
}

 

 

 

 DAY 6考试

DAY 6考试

题解

提供一种暴力解法,就是60%的数据N<=1000,所以想到可以Floyd暴力处理

 Floyd如果两点之间有路径,那么就可以记录一下这条路径上的最大点和最小点啊

然后for循环,如果两点之间有路径,那就求出最大差值辣

//正着倒着跑BFS 


#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#include<queue>
#include<cstdlib>

using namespace std;

inline int read()
{
    int ans=0;
    char last=' ',ch=getchar();
    while(ch<'0'||ch>'9') last=ch,ch=getchar();
    while(ch>='0'&&ch<='9') ans=ans*10+ch-'0',ch=getchar();
    if(last=='-') ans=-ans;
    return ans;
}

const int maxn=1e5+10,maxm=500005;
int n,m,ans=0;
int w[maxn];
int zuida=0,zuixiao=1e6;

struct node
{
    int val;
    int maxx=0;
    int minn=1e6;
}dis[4001][4001];

int main()
{
    freopen("b.in","r",stdin);
    freopen("b.out","w",stdout);
    n=read();m=read();
    for(int i=1;i<=n;i++)
    {
        w[i]=read();
        zuida=max(zuida,w[i]);
        zuixiao=min(zuixiao,w[i]);
    }
      
    
    if(n<=4000)
    {
        for(int i=1;i<=m;i++)
        {
           int u,v;
           u=read();v=read();
           dis[u][v].val =1;
           dis[u][v].maxx =max(w[u],w[v]); 
           dis[u][v].minn =min(w[u],w[v]); 
           ans=max(ans,dis[u][v].maxx -dis[u][v].minn );
        } 
        for(int k=1;k<=n;k++)
          for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
            if(dis[i][k].val &&dis[k][j].val )
            {
                if(dis[i][k].val +dis[k][j].val>dis[i][j].val )
                {
                    dis[i][j].val =max(dis[i][j].val ,dis[i][k].val +dis[k][j].val );
                    dis[i][j].maxx =max(dis[i][j].maxx,max(w[i],max(w[j],w[k])));
                    dis[i][j].minn =min(dis[i][j].minn,min(w[i],min(w[j],w[k])));
                }
                ans=max(ans,dis[i][j].maxx -dis[i][j].minn );
            }    
        
        printf("%d\n",ans);
        
    }
    else
    printf("%d\n",zuida-zuixiao);
    
    return 0;
}

 
Floyd暴力代码

相关文章: