给定直线的形式是在这条直线上的两个点的坐标
当直线斜率只有1种时,答案是1
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<map>
#define ll long long
using namespace std;
int T,n;
ll a,b,c,d;
inline ll read(){
ll s=0,w=1;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
double k[4],kk;
int main()
{
// freopen("3.in","r",stdin);
// freopen("3.o)
scanf("%d",&T);
while(T--){
scanf("%d",&n);
k[1]=0,k[2]=0,k[3]=0;
int res=0;
for(int i=1;i<=n;i++){
// scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
a=read();b=read();c=read();d=read();
if(a==c) kk=192608017.794951;
else kk=(double) (b-d)/(a-c);
if(res==0) k[++res]=kk;
else if(res==1){
if(k[1]!=kk) k[++res]=kk;
}
else if(res==2){
if(kk!=k[1]&&kk!=k[2]){res=3;}
}
else if(res==3) continue;
}
if(res==1||n==1||n==0) printf("0\n");
else if(res==2&&n>2) printf("2\n");
else if(res==3) printf("3\n");
else if(res==2&&n==2)printf("1\n");
}
return 0;
}
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<map>
#define N 100005
#define ll long long
using namespace std;
int n,m;
ll T,s,tim,res;
struct node{
int id;
ll p,t;
}d[N];
bool cmp(node a,node b){
return a.p *b.t >b.p *a.t ;
}
bool cmp1(node a,node b){
return a.id <b.id;
}
int main()
{
scanf("%d%d%lld",&n,&m,&T);
for(int i=1;i<=n;i++) d[i].id =i,scanf("%lld%lld",&d[i].p,&d[i].t);
sort(d+1,d+n+1,cmp);
for(int i=1;i<=n;i++) s+=d[i].p ,tim+=d[i].t ,res+=tim*d[i].p ;
printf("%lld\n",s*T-res);
while(m--){
int x;
ll a,b;
s=0,tim=0,res=0;
scanf("%d%lld%lld",&x,&a,&b);
for(int i=1;i<=n;i++) if(d[i].id==x) {d[i].p=a,d[i].t =b;break;}
// sort(d+1,d+n+1,cmp1);
// d[x].p =a,d[x].t =b;
sort(d+1,d+n+1,cmp);
for(int i=1;i<=n;i++) s+=d[i].p ,tim+=d[i].t ,res+=tim*d[i].p ;
printf("%lld\n",s*T-res);
}
return 0;
}
原文:https://www.cnblogs.com/Vimin/p/11645148.html