• 题解 洛谷P3799 【妖梦拼木棒】


    一道水题 (还是做了一个小时,我太菜了

    基本思路:

    题里面说,4根棍子拼成一个正三角形(等边三角形)

    若设这四根棍子长度为(a,b,c,d)(a≥b>c≥d)

    那很容易得到 (真的很容易):

    (a=b=c+d)

    自然,我们只需枚举(a)的长度和(c)的长度就行了

    长度最长才5k,木棍用桶按长度装一下,遍历的时候也方便。

    代码要好好看完啊kora

    #include <bits/stdc++.h>
    #define c1(a) (a)//带参宏定义,本题不必写函数 
    #define c2(a) ((a)*((a)-1)/2)
    using namespace std;
    const int mode=1000000007;
    int aaa[5010];//桶 
    int main()
    {
    	ios::sync_with_stdio(0);
    	cin.tie(0);
    	cout.tie(0);//io流解绑 
    	int n;
    	cin>>n;
    	for(int i=1;i<=n;i++)
    	{
    		int k;
    		cin>>k;
    		aaa[k]++;//往桶里扔
    	}
    	int ans=0;
    	for(int a=2;a<=5000;a++)
       {
    			for(int c=1;c<=a/2;c++)//c最大只能到a的一半 
    			{
    				int d=a-c;//把d算出来判定相等 
    				if(d!=c&&aaa[a]>=2&&aaa[c]>=1&&aaa[d]>=1)//c d不同 
    				{
    					ans+=((c2(aaa[a])%mode)*(c1(aaa[c])%mode)*(c1(aaa[d])%mode))%mode;
    				}
    				else if(d==c&&aaa[a]>=2&&aaa[c]>=2)//c d相同 
    				{
    					ans+=((c2(aaa[a])%mode)*(c2(aaa[c])%mode))%mode;
    				}
    				ans%=mode;
    			}
    	}
    	cout<<ans%mode;//多模几次总没问题的 
    	return 0;
    }
    
    
  • 相关阅读:
    go test 下篇
    go test 上篇
    利用Docker Compose快速搭建本地测试环境
    phinx:php数据库迁移
    tp5 r3 一个简单的SQL语句调试实例
    TP开发小技巧
    优酷真实视频地址解析——2014年10月7日
    霍夫变换
    Google Earth影像数据破解之旅
    线程理论:(四)锁优化
  • 原文地址:https://www.cnblogs.com/IzayoiMiku/p/12759755.html
Copyright © 2020-2023  润新知