A题.水题
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
bool flag=false;
while(t--)
{
int n;
scanf("%d",&n);
if(n) flag=true;
}
if(flag) cout<<"hard"<<endl;
else cout<<"easy"<<endl;
return 0;
}
B题.判断点是否在一个矩形内
#include <bits/stdc++.h>
using namespace std;
const double eps=1e-8;
struct line{
double lv,jue;
};
struct CPoint
{
double x,y;
}point[103];
int dcmp(double x)
{
if(x<-eps) return -1;
else return (x>eps);
}
double cross(CPoint p0,CPoint p1,CPoint p2)
{
return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);
}
double dot(CPoint p0,CPoint p1,CPoint p2)
{
return (p1.x-p0.x)*(p2.x-p0.x)+(p1.y-p0.y)*(p2.y-p0.y);
}
int PointOnSegment(CPoint p0,CPoint p1,CPoint p2)
{
return dcmp(cross(p0,p1,p2))==0&&dcmp(dot(p0,p1,p2))<=0;
}
int PointInPolygon(CPoint cp,CPoint p[],int n)
{
int i,k,d1,d2,wn=0;
// double sum=0;
p[n]=p[0];
for( i=0;i<n;i++)
{
if(PointOnSegment(cp,p[i],p[i+1])) return 2;
k=dcmp(cross(p[i],p[i+1],cp));
d1=dcmp(p[i+0].y-cp.y);
d2=dcmp(p[i+1].y-cp.y);
if(k>0&&d1<=0&&d2>0)wn++;
if(k<0&&d2<=0&&d1>0)wn--;
}
return wn!=0;
}
int main()
{
int n,n1,d;
n1=4;
while(cin>>n>>d)
{
point[0].x=0,point[0].y=d;
point[1].x=d,point[1].y=0;
point[2].x=n,point[2].y=n-d;
point[3].x=n-d,point[3].y=n;
int m;
cin>>m;
CPoint temp;
line a1,a2,a3,a4;
a1.lv=((double)point[1].y-point[0].y)/(point[1].x-point[0].x),a1.jue=(double)point[0].y-a1.lv*point[0].x;
a2.lv=((double)point[0].y-point[3].y)/(point[0].x-point[3].x),a2.jue=(double)point[0].y-a2.lv*point[0].x;
a3.lv=((double)point[1].y-point[2].y)/(point[1].x-point[2].x),a3.jue=(double)point[1].y-a3.lv*point[1].x;
a4.lv=((double)point[2].y-point[3].y)/(point[2].x-point[3].x),a4.jue=(double)point[2].y-a1.lv*point[2].x;
for(int j=1;j<=m;j++)
{
cin>>temp.x>>temp.y;
if(PointInPolygon(temp,point,n1)==1||fabs(a1.lv*temp.x+a1.jue-temp.y)<=eps||fabs(a2.lv*temp.x+a2.jue-temp.y)<=eps||fabs(a3.lv*temp.x+a3.jue-temp.y)<=eps||fabs(a4.lv*temp.x+a4.jue-temp.y)<=eps)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
return 0;
}
C题.前缀和+尺取
#include<bits/stdc++.h>
using namespace std;
const int maxn=1000+5;
bool p[maxn];
char s[maxn];
void is_prime()
{
memset(p,true,sizeof(p));
p[0]=p[1]=false;
for(int i=2;i*i<=maxn;i++)
{
if(p[i]) {
for(int j=i*i;j<=maxn;j+=i)
p[j]=false;
}
}
}
int main()
{
is_prime();
int n;
scanf("%d",&n);
scanf("%s",s);
int a[maxn],sum=0,z=-1;
for(int i=0;i<n;i++)
{
a[i]=s[i]-'0';
sum+=a[i];
z=max(z,a[i]);
}
bool flag=false;
int sum1[maxn];
memset(sum1,0,sizeof(sum1));
sum1[0]=a[0];
for(int i=1;i<n;i++)
{
sum1[i]=sum1[i-1]+a[i];
}
//cout<<z<<endl;
if(sum==0||(p[sum]&&z==1)) {
cout<<"yes";
return 0;
}
for(int i=z;i<sum;i++)
{
if(flag) break;
if(sum%i==0) {
//以i作为一段和
int last=-1;
for(int j=0;j<n;j++)
{
if(last==-1) {
if(sum1[j]==i) {
last=j;
}
}
else {
if(sum1[j]-sum1[last]==i||sum1[j]==sum1[last]) {
last=j;
}
}
}
if(last==n-1&&i!=sum) flag=true;
}
}
if(flag) cout<<"yes";
else cout<<"no";
return 0;
}
D题.计算几何+暴力
//全部以直角三角形来画
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
LL n,m,k,solve;
scanf("%lld%lld%lld",&n,&m,&k);
solve=(LL)n*m*2;
if(solve%k==0) {
//a*b==solve 寻找一组a b满足条件 a<=n b<=m
LL a,b;
bool flag=false;
//对k进行找因子的过程
if(k&1) {
//k为奇数时
LL k1,k2,k3,k4;
for(int i=1;i*i<=k;i++)
{
if(flag) break;
if(k%i==0) {
k1=i;
k2=k/i;
if(((LL)2*n%k1==0&&(LL)m%k2==0)||((LL)2*n%k2==0&&(LL)m%k1==0)) {
if((LL)2*n%k1==0&&(LL)m%k2==0) {
k3=(LL)2*n/k1;
k4=(LL)m/k2;
if((k3<=n&&k4<=m)||(k4<=n&&k3<=m)) {
a=k3;
b=k4;
if(k4<=n&&k3<=m) {
swap(a,b);
}
flag=true;
}
}
else {
if((LL)2*n%k2==0&&(LL)m%k1==0) {
k3=(LL)2*n/k2;
k4=(LL)m/k1;
if((k3<=n&&k4<=m)||(k4<=n&&k3<=m)) {
a=k3;
b=k4;
if(k4<=n&&k3<=m) swap(a,b);
flag=true;
}
}
}
}
if(((LL)2*m%k1==0&&(LL)n%k2==0)||((LL)2*m%k2==0&&(LL)n%k1==0)) {
if((LL)2*m%k1==0&&(LL)n%k2==0) {
k3=(LL)n/k2;
k4=(LL)2*m/k1;
if((k3<=n&&k4<=m)||(k4<=n&&k3<=m)) {
a=k3;
b=k4;
if(k4<=n&&k3<=m) {
swap(a,b);
}
flag=true;
}
}
else {
if((LL)2*m%k2==0&&(LL)n%k1==0) {
k3=(LL)n/k1;
k4=(LL)2*m/k2;
if((k3<=n&&k4<=m)||(k4<=n&&k3<=m)) {
a=k3;
b=k4;
if(k4<=n&&k3<=m) swap(a,b);
flag=true;
}
}
}
}
}
}
}
else {
k>>=1;
LL k1,k2;
for(int i=1;i*i<=k;i++)
{
if(flag) break;
if(k%i==0) {
k1=i;
k2=k/i;
if((n%k1==0&&m%k2==0)||(n%k2==0&&m%k1==0)) {
flag=true;
if(n%k1==0&&m%k2==0) {
a=(LL)n/k1;
b=(LL)m/k2;
}
else if(n%k2==0&&m%k1==0) {
a=(LL)n/k2;
b=(LL)m/k1;
}
}
}
}
}
//cout<<b<<endl;
if(flag) {
cout<<"yes"<<endl;
printf("0 0\n%lld 0\n0 %lld\n",a,b);
}
else cout<<"no"<<endl;
}
else cout<<"no"<<endl;
return 0;
}