初看到一堆矩形和相互接触颜色不同,yy了一下,离散化,并查集,再dfs,后来看到了线段长度为奇数,发现只要看坐标奇偶性涂色就行。
粗鄙的代码
#include <algorithm>
#include <bitset>
#include <cassert>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <iomanip>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <string>
using namespace std;
typedef long long ll;
int main()
{
int n;
scanf ("%d",&n);
int i;
printf("YES\n");
for (i=1;i<=n;i++){
int a,b,c,d;
scanf ("%d %d %d %d",&a,&b,&c,&d);
int p = a%2;
int q = b%2;
int ans=1;
if (p && q) ans = 1;
if (p&& !q) ans = 2;
if (!p && q) ans =3;
if (!p && !q) ans = 4;
printf("%d\n", ans);
}
return 0;
}
优秀的代码
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
#include <set>
#include <stack>
#include <map>
#include <climits>
using namespace std;
#define LL long long
const int INF=0x3f3f3f3f;
const int MAX=100009;
int main()
{
int n;
while(~scanf("%d",&n))
{
printf("YES\n");
int a,b,c,d;
for(int i=0; i<n; i++)
{
scanf("%d%d%d%d",&a,&b,&c,&d);
printf("%d\n",1+2*(abs(a)%2)+abs(b)%2);
}
}
return 0;
}