声明:以下的代码是在比赛中写的,很乱,所以请见谅。
A题
题意:
是否能找出可以与目标向量平行的向量。
题解:
给出向量的起点和终点,该向量为:;
一个向量和另一个向量相加有:;
一个向量和另一个向量平行有:;
根据以上的条件进行暴力寻找是否存在一个向量能与目标向量平行的。
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+100;
struct node{
int x1,x2;
int y1,y2;
int x,y;
}w[N];
int main()
{
int n,sx,sy,ex,ey,sex,sey;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d%d%d",&w[i].x1,&w[i].y1,&w[i].x2,&w[i].y2),w[i].x=w[i].x1-w[i].x2,w[i].y=w[i].y1-w[i].y2;
scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
sex=sx-ex,sey=sy-ey;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
int dx=w[i].x+w[j].x;
int dy=w[i].y+w[j].y;
if(dx*sey==dy*sex)
{
puts("YES");
return 0;
}
}
}
puts("NO");
return 0;
}
B题
题意:
在一串字符串中找出第一次出现QAQ的位置。
题解:
一个for去寻找,或者使用c++中的find()去寻找。
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
int len=s.length();
for(int i=0;i<len;i++)
{
if(s[i]=='Q'&&s[i+1]=='A'&&s[i+2]=='Q')
{
printf("%d\n",i+1);
return 0;
}
}
}
E题
题意:
将一个十进制数x转化为二进制数s,将s又进行翻转为一个十进制数y,算出n个x转化为y的和。
题解:
根据题意进行模拟计算。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll sum=0,x;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lld",&x);
ll y=0,op=1,up=2;
string s;
s="";
while(x)
{
if(x%2)
s+='1';
else if(s.length())
s+='0';
x/=2;
}
int len=s.length();//cout<<"len="<<len<<" "<<s<<endl;
for(int i=len-1;i>=0;i--)
{
if(s[i]=='1')
y+=op;
op=up;up*=2;
}
sum+=y;
}
printf("%lld\n",sum);
return 0;
}