哦。亲爱的豆豆。
你为什么要把你的作业交给机器来做?
难怪你智商低。难怪你做不来数学题。
难怪你还跑不过鸡。
以上鬼扯。
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;
}
}
大抵就是如此。
以上!