zoukankan      html  css  js  c++  java
  • [bzoj1610][Usaco2008 Feb]Line连线游戏_暴力枚举

    Line连线游戏 bzoj-1610 Usaco-2008 Feb

    题目大意:Farmer John最近发明了一个游戏,来考验自命不凡的贝茜。游戏开始的时 候,FJ会给贝茜一块画着N (2 <= N <= 200)个不重合的点的木板,其中第i个点 的横、纵坐标分别为X_i和Y_i (-1,000 <= X_i <=1,000; -1,000 <= Y_i <= 1,000)。 贝茜可以选两个点画一条过它们的直线,当且仅当平面上不存在与画出直线 平行的直线。游戏结束时贝茜的得分,就是她画出的直线的总条数。为了在游戏 中胜出,贝茜找到了你,希望你帮她计算一下最大可能得分。

    想法:因为一个木板可以使用多次,所以我们暴力枚举任意两个点,并用一个STL将这个斜率存起来,我这里用两个数组,记录分子和分母以免重复,然后sort后扫一遍。

    最后,附上丑陋的代码... ...

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define N 220 
    using namespace std;
    struct Node{int u,d;}f[N*N]; int x[N],y[N],ans,tot;
    inline bool cmp(Node a,Node b){return a.u==b.u?a.d<b.d:a.u<b.u;}
    // int gcd(int x,int y){return y?gcd(y,x%y):x;}
    int main()
    {
    	int n; cin >> n ;
    	for(int i=1;i<=n;i++) scanf("%d%d",&x[i],&y[i]);
    	bool flag=false;
    	// puts("Fuck");
    	for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++)
    	{
    		int p=x[i]-x[j],q=y[i]-y[j];
    		if(q==0)
    		{
    			if(!flag) ans++,flag=true;
    			continue;
    		}
    		// puts("Bitch");
    		// printf("%d %d
    ",i,j);
    		int g=__gcd(p,q);
    		f[++tot].u=p/g,f[tot].d=q/g;
    	}
    	// puts("Fuck");
    	sort(f+1,f+tot+1,cmp);
    	// puts("Fuck");
    	for(int i=1;i<=tot;i++)
    	{
    		if(f[i].u==f[i-1].u&&f[i].d==f[i-1].d) continue;
    		// printf("Woc %d %d
    ",f[i].u,f[i].d);
    		ans++;
    	}
    	// puts("Fuck");
    	printf("%d
    ",ans);
    	return 0;
    }
    /*
    4
    -1 1
    -2 0
    0 0
    1 1
    */
    

     小结:刷水真开心...

  • 相关阅读:
    Memcached Tip 1:使用Memcached Providers
    MVC TIP8:为控制器增加有参构造函数(为了注入等其它用途)
    压力测试的轻量级具体做法
    Memcached Tip 2:Session同步
    ASP.NET性能优化之分布式Session
    ASP.NET性能优化之让浏览器缓存动态网页
    最精简领域驱动设计开发模版(针对WPF)
    MOQ TIP1:简介加基础
    ASP.NET性能优化之减少请求
    MOQ TIP2:匹配参数
  • 原文地址:https://www.cnblogs.com/ShuraK/p/9325910.html
Copyright © 2011-2022 走看看