2017.10.14一试

哦。亲爱的豆豆。
你为什么要把你的作业交给机器来做?
难怪你智商低。难怪你做不来数学题。
难怪你还跑不过鸡。

以上鬼扯。

T1

轻松暴力~

T2

轻松暴力~

T3

轻松暴力~(雾)

T2

嗯……暴力是可以。打表嘛。
但是!我们不能满足于此!
代码如下:

#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;

inline int read()
{
    int X=0,w=1; char ch=0;
    while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}
    while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();
    return X*w;
}

inline void write(int x)
{
     if(x<0) putchar('-'),x=-x;
     if(x>9) write(x/10);
     putchar(x%10+'0');
}

int t;
long long x;

bool judge(long long x)
{
    long long jud1 = (x-1)/3;
    if(3*jud1+1!=x)return false;

    long long jud2 = sqrt(1+4*jud1);
    if(jud2*jud2!=1+4*jud1)return false;

    if(jud2%2!=1)return false;

    //cout << (jud2+1)/2 << " " << (jud2-1)/2 << endl;
    return true;
}

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    cin >> t;
    while(t--)
    {
        cin>>x;
        cout<<((judge(x))?("YES"):("NO"))<<endl;
    }
}

PS:撇开暴力,这也不算一道难题~

T3

这道题有点厉害……很难想啊……
代码如下:

#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;

long long read()
{
    long long X=0,w=1; char ch=0;
    while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}
    while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();
    return X*w;
}

const int kkk=100500;
#define pii pair<int,long long>

priority_queue< pair<long long,int> >que;
int n,m,k,ki[kkk],pos[kkk];
long long ans,dis[kkk];
vector<pii>side[kkk];

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);std::cout.tie(0);

    for(int t=read(),tt=1;tt<=t;++tt)
    {
        n = read();     m = read();
        for(int i=1;i<=n;i++)side[i].clear();
        for(int i=1;i<=m;i++)
        {
            int u=read(),v=read();
            long long val=read();
            side[u].push_back(make_pair(v,val));
            side[v].push_back(make_pair(u,val));    
        }

        k = read();
        memset(pos,0,sizeof(pos));

        for(int i=1;i<=k;i++)ki[i]=read(),pos[ki[i]]=i;
        ans = 0x3f3f3f3f3f3f3f3f;

        for(int j=0;(1<<j)<=k;j++)
        {
            memset(dis,127,sizeof(dis));
            while(!que.empty())que.pop();
            for(int i=1;i<=k;i++)if(i&(1<<j))
                dis[ki[i]]=0,que.push(make_pair(0,ki[i]));

            while(!que.empty())
            {
                int u=que.top().second; que.pop();

                if(pos[u]&&!(pos[u]&(1<<j)))
                    {ans=min(ans,dis[u]);break;}

                for(int i=side[u].size()-1;i>=0;i--)
                {
                    int v=side[u][i].first;
                    long long val=side[u][i].second;

                    if(dis[v]>dis[u]+val)
                    {
                        dis[v] = dis[u] + val;
                        que.push(make_pair(-dis[v],v));
                    }
                }
            }
        }
        cout << ans << endl;
    }
}

大抵就是如此。
以上!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值