310宿舍专用
——by刘嘉俊
//----------T1参考代码:-------------
#include <stdio.h>
#include <cmath>
#include<iostream>
using namespace std;
int main(){
double x[5], y[5];
int K[7][2] = { 0,0, 1,2, 1,3, 1,4, 2,3, 2,4, 3,4 };//第i条线段由哪两个点组成
int T; scanf("%d",&T);
while(T--){
for(int i=1;i<=4;i++)
cin >> x[i] >> y[i];
double Line[7][2];
for(int i=1, n=1;i<=4;i++)
for(int k=i+1;k<=4;k++,n++)
Line[n][0] = (x[i]+x[k])/2, Line[n][1] = (y[i]+y[k])/2;//记录线段中点
bool flag = false;
for(int i=1;i<=6;i++)
for(int k=i+1;k<=6;k++)
if(Line[i][0]==Line[k][0] && Line[i][1]==Line[k][1] &&
(y[K[i][0]]-y[K[i][1]])*(x[K[k][0]]-x[K[k][1]]) != (y[K[k][0]]-y[K[k][1]])*(x[K[i][0]]-x[K[i][1]]))//中点相同,并且斜率不同
flag = true;
if(flag) puts("YES");
else puts("NO");
}
return 0;
}
//----------T2参考代码:-------------
#include <stdio.h>
#include <string.h>
int main(){
int i,n,m,a,x,y,c,j;
scanf("%d%d",&n,&m);
char s[100000],temp,z[10000];
getchar(); //get一个'\n' 否则后面的getchar()会出错
for(i=1;i<=n;i++)
s[i]=getchar();
while(m--){
scanf("%d",&a);
if(a==1){ //1. l, r 反转[l,r]区间的字符
scanf("%d%d",&x,&y);
c=(y-x)/2;
for(i=x;i<=x+c;i++){
temp=s[i];
s[i]=s[x+y-i];
s[x+y-i]=temp;
}
}
if(a==2){ //2. p, str 在第p个字符后插入字符串str
scanf("%d",&x);
getchar();
j=0;
z[j]=getchar();
while(z[j]!='\n'){
j++;
z[j]=getchar();
}
for(i=n;i>=x+1;i--)
s[i+j]=s[i];
c=0;
for(i=x+1;i<=x+j;i++){
s[i]=z[c];
c++;
}
n=n+j;
}
if(a==3){ //3. l r 询问当前字符串子串s[l,r]是什么
scanf("%d%d",&x,&y);
for(i=x;i<=y;i++)
putchar(s[i]);
puts(s);
}
}
return 0;
}
//----------T3参考代码:-------------
#include <cstdio>
#include <cmath>
using namespace std;
int x[500], y[500];
double dis(int x1, int y1, int x2, int y2){
return sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
int main(){
int n; scanf("%d",&n);
long long res = 0;
for (int i = 1; i <= n; i++) scanf("%d%d",&x[i],&y[i]);
for (int i = 1; i <= n - 2; i++){
for (int j = i + 1; j <= n - 1; j++){
for (int k = j + 1; k <= n; k++){
double l1 = dis(x[i], y[i], x[j], y[j]);
double l2 = dis(x[i], y[i], x[k], y[k]);
double l3 = dis(x[j], y[j], x[k], y[k]);
if (l1 + l2 != l3 && l1 + l3 != l2 && l2 + l3 != l1){
if (l1 == l2 || l2 == l3 || l1 == l3){
if (l1 == l2){
if (l3 < l1 + l2) res++;
}else if (l1 == l3){
if (l2 < l1 + l3) res++;
}else if (l2 == l3){
if (l1 < l2 + l3) res++;
}
}
}
}
}
}
printf("%lld",res);
}