2017.10.14一试

来源:互联网 发布:淘宝二维码用微信打开 编辑:程序博客网 时间:2024/05/16 01:13

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

以上鬼扯。

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;    }}

大抵就是如此。
以上!