A-Knight Fork
B-Sum Sum Max
C-Horizon
D-Integer Division
E-Ranges on Tree
F-Jumping Takahashi
G-Prime Sum Game
H-Count Distinct Integers
I-Strange Balls
**
.题意:给定2个点 a(x1,y1),b(x2,y2),从a开始,2步(马步)之内是否能到达b点. 代码:**
//直接暴搜
#include
using namespace std;
int x1,y11,x2,y2;
bool flag=0;
int nxt[8][2]={{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2},{-1,-2},{-2,-1}};
void dfs(int x,int y,int step)
{
if(step>=2)
{
if(x==x2 && y==y2)
{
flag=1;
return;
}
return ;
}
if(flag)
return;
for(int i=0;i<=7;i++)
{
int tx=x+nxt[i][0];
int ty=y+nxt[i][1];
dfs(tx,ty,step+1);
}
}
int main()
{
cin>>x1>>y11>>x2>>y2;
dfs(x1,y11,0);
if(flag)
cout<<"Yes";
else
cout<<"No";
return 0;
}
**
.(三分不会…)**
题意:输入X,输出 sqrt(x(12800000+x)) 精准度至少到1e-6*
#include
#include
#include
using namespace std;
int main()
{
double x;
cin>>x;
printf("%.8lf",sqrt(x*1.0*(12800000+x)));
return 0;
}
**
题意:输入X,输出 [x/10]
代码如下:
#include
using namespace std;
long long n;
int main()
{
cin>>n;
if(n<0)
{
if(n%10!=0)
{
cout<<n/10-1;
return 0;
}
}
cout<<n/10;
return 0;
}
**
题意:给出N组数据,每组2个数ai,bi;即每一步可以向右走ai,或者bi的距离,当第N步的时候,是否能恰好到达X.
代码:
#include
using namespace std;
int dp[101][100010];
int n,x;
int main()
{
cin>>n>>x;
for(int i=1;i<=n;i++)
{
cin>>a[i]>>b[i];
}
dp[0][0]=1;//边界
for(int i=1;i<=n;i++)
{
for(int j=x;j>=0;j--)
{
if(j-e[i].x>=0 && dp[i-1][j-e[i].x])
dp[i][j]=1;
if(j>=e[i].y && dp[i-1][j-e[i].y])
dp[i][j]=1;
}
}
if(dp[n][x])
cout<<"Yes";
else
cout<<"NO";
return 0;
**
题意:在范围T:(a,b)和A:(c,d)中,分别任选1个数,如果T中,存在一个数x,使得对任意A中的元素,二者相加都不为素数,则输出Takahashi,否则输出Aoki.
代码如下:
#include
using namespace std;
bool pd(int x)
{
if(x<=1)
return 0;
for(int i=2;i*i<=x;i++)
{
if(x%i==0)
return 0;
}
return 1;
}
int main()
{
int a,b,c,d;
cin>>a>>b>>c>>d;
for(int i=a;i<=b;i++)
{
bool flag=0;
for(int j=c;j<=d;j++)
{
if(pd(i+j))
{
flag=1;
break;
}
}
if(flag==0)
{
cout<<"Takahashi";
return 0;
}
}
cout<<"Aoki";
return 0;
}
**
题意:输入N个数,输出有多少个不一样的。
代码如下:
#include
#include
int n;
using namespace std;
set<int>s;
int main()
{
cin>>n;
int x;
for(int i=1;i<=n;i++)
{
cin>>x;
s.insert(x);
}
cout<<s.size();
return 0;
}
**
题意:有N个球,逐一放入一个栈里,每个球上面都有一个号码x,当有有x个连续的球排在一起时,就会消失,求每次放球后,栈内的数量。
代码如下:
#include
using namespace std;
int n;
vector<pair<int,int>>p;
int main()
{
int x;
cin>>n;
int ans=0;
p.emplace_back(-1,0);
while(n--)
{
cin>>x;
if(x==p.back().first)
{
p.back().second++;
}
else
p.emplace_back(x,1);
ans++;
if(p.bakc().first==p.back().second)
{
ans-=p.back().second;;
p.pop_back();
}
cout<<ans<<endl;
}
return 0;
}