比赛对了6/10,这个比赛相对简单吧。
补题
小杨在心灵走廊中闯入603号房间时,一张巨大的星图展现在他的面前,脚边也多了m支笔。星图上每颗星都代表着一个交点,每两颗星之间可能有线相连,每条线除了端点没有其他点。每次只能画一笔,现给出n条线两端点的xy坐标,小杨想知道,用m支笔是否能描完这张星图,如果不能完成,那么还需要几支笔。
输入格式:
第一行输入n,m(n,m<100)表示有n条线,m支笔。
接下来n行输入x1,y1,x2,y2(0<=x1,y1,x2,y2<=10^15)表示这条线段两端点的星的坐标。
输出格式:
如果能用不大于m支笔的数量描完这个星图,就输出"yes"(不带引号),否则输出"no"(不带引号)并在下一行输出还需要几支笔才能描完这个星图。
输入样例:
在这里给出一组输入。例如:
3 1
0 0 0 3
0 3 3 3
3 3 0 0
输出样例:
在这里给出相应的输出。例如:
yes
输入样例:
在这里给出一组输入。例如:
7 1
-14 35 -5 24
-29 12 20 12
-22 -1 -35 -19
8 -4 24 -23
-30 -36 21 -35
-21 -36 17 -44
-35 -61 27 -61
输出样例:
在这里给出相应的输出。例如:
no
6
让我很无语的好像做对的都知道这个
代码很简单滴,话说不知道这个公式有人当场想的出来,那他得非常聪明了。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll>PII;
map<PII,int>mp;
ll n,m;
ll a[105],b[105];
int cnt;
int main()
{
cin>>n>>m;
for(int i=1;i<=2*n;i++)
{
cin>>a[i]>>b[i];
mp[{a[i],b[i]}]++;
}
for(int i=1;i<=2*n;i++)
{
if(mp[{a[i],b[i]}]%2)
{
cnt++;
}
}
if(cnt==0||cnt==2)
{
if(m>=1)
{
cout<<"yes";
}
else
{
cout<<1;
}
}
else
{
if(m<cnt/2)
{
cout<<"no"<<endl; cout<<cnt/2-m;
}
else
{
cout<<"yes";
}
}
return 0;
}