-1.
#include<iostream>
#include<vector>
using namespace std;
int n;
int m;
class Point{
public:
int x;
int y;
char flag;
};
class Linear{
public:
int c;
int a;
int b;
};
//检查是否在一边
int isSame1(Point p1,Point p2,Linear l1){
if(l1.a*p1.x+l1.c>-l1.b*p1.y&&l1.a*p2.x+l1.c>-l1.b*p2.y) return 1;
else if(l1.a*p1.x+l1.c<-l1.b*p1.y&&l1.a*p2.x+l1.c<-l1.b*p2.y) return 1;
else return 0;
}
//检查类别是否相同
int isSame2(Point p1,Point p2){
if(p1.flag==p2.flag) return 1;
return 0;
}
int main(){
cin>>n>>m;
vector<Point> v1;
vector<Linear> v2;
//输入
for(int i=0;i<n;i++){
int x,y;
char flag;
cin>>x>>y>>flag;
Point p={x,y,flag};
v1.push_back(p);
}
for(int i=0;i<m;i++){
int c,a,b;
cin>>c>>a>>b;
Linear l = {c,a,b};
v2.push_back(l);
}
//检查两点之间的关系
for(int j=0;j<m;j++){
int flag = 1;
//标记分类是否正确
for(int i=0;i<n;i++){
for(int k=i+1;k<n;k++){
if(isSame1(v1[i],v1[k],v2[j])){
if(!isSame2(v1[i],v1[k])) {
flag = 0;
}
}
}
}
if(flag) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}
- 2
#include<iostream>
#include<iterator>
#include<map>
using namespace std;
long long ans = 0;
int n;
//维数
int a;
//第一个向量非零元素个数
int b;
//第二个向量非零元素个数
int main(){
cin>>n>>a>>b;
map<int,long> v1;
map<int,long> v2;
for(int i=0;i<a;i++){
int value;
int key;
cin>>key>>value;
v1[key]=value;
}
for(int i=0;i<b;i++){
int value;
int key;
cin>>key>>value;
v2[key]=value;
}
map<int,long>::iterator it = v1.begin();
for(;it!=v1.end();it++){
if(v2.find(it->first)!=v2.end()){
ans+=v2[it->first]*v1[it->first];
}
}
cout<<ans;
return 0;
}