第一题:找规律就好了,前k个和后n到n+k是不一样的,中间都是k。
#include <vector>
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n,k,t;
scanf("%d%d%d",&n,&k,&t);
if(t<=k) cout<<t;
else if(t>k&&t<n) cout<<k;
else cout<<n+k-t;
return 0;
}
第二题:三个点,我开始的思路是两个点距离相等,并且两个向量垂直。
然而只要三点不共线,就存在解。
程序是只要两个点的中点不与b相等。
#include<iostream>
#include<cstdio>
#include <algorithm>
#include <cstring>
#include <set>
using namespace std;
typedef long long LL;
LL f2(int x,int y,int a,int b){
return (b-y)*(LL)(b-y)+(a-x)*(LL)(a-x);
}
int main()
{
int x1,y1,x2,y2,x3,y3;
scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3);
if((x1+x3)==2*x2&&(y1+y3)==2*y2) return 0*printf("No");
if(f2(x1,y1,x2,y2)==f2(x2,y2,x3,y3)) return 0*printf("Yes");
return 0*printf("No");
}