Square Time

Square

Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 75   Accepted Submission(s) : 15
Problem Description
Given a set of sticks of various lengths, is it possible to join them end-to-end to form a square?
 

Input
The first line of input contains N, the number of test cases. Each test case begins with an integer 4 <= M <= 20, the number of sticks. M integers follow; each gives the length of a stick - an integer between 1 and 10,000.
 

Output
For each case, output a line containing "yes" if is is possible to form a square; otherwise output "no".
 

Sample Input
3 4 1 1 1 1 5 10 20 30 40 50 8 1 7 2 6 4 4 3 5
 

Sample Output
yes no yes
#include<iostream>
#include<algorithm>
using namespace std;
int N;//木块数量
int L[21];//每块木块的长度
int len;//形成正方形的边长
int s;//所有木块长度
bool used[21];
int cmp(const void * a,const void *b)
{
    return *(int *)b - *(int *)a;
}
bool find(int setnum,int depth,int sum=0)
{
    if(setnum ==1)
        return true;
    for(int i=depth;i<=N;++i)
    {
        if(used[i]==true)
            continue;
        if (i>1 && !L[i - 1] && L[i] == L[i-1])
            continue;
        int sum_now=L[i]+sum;
        if(sum_now < len)
        {
            used[i]=true;
            if(find(setnum,i+1,sum_now))
                return true;
            used[i]=false;
        }
        else
            if(sum_now==len)
            {
                used[i]=true;
                if(find(setnum-1,1,0))
                    return true;
                used[i]=false;
            }
            if(sum_now==len || sum ==0)
                break;
    }
    return false;
}
int main()
{
    int i,j,t;
    int MAX;
    cin>>t;
    for(i=1;i<=t;++i)
    {
        cin>>N;
        s=0;
        MAX=0;
        for(j=1;j<=N;++j)
        {
            cin>>L[j];
            s+=L[j];
            used[j]=false;//设置为未使用
            if(L[j]>MAX)
                MAX=L[j];//考虑单个L[j]>Len
        }
        if(s%4!=0)//总和不能被4整除
        {
            cout<<"no"<<endl;
            continue;
        }
        else
            len=s/4;
        if(MAX>len)//最大的数不有大于边长
        {
            cout<<"no"<<endl;
            continue;
        }
        qsort(L+1,N,sizeof(int),cmp);
        if(find(4,1,0))
            cout<<"yes"<<endl;
        else
            cout<<"no"<<endl;
    }
    return 0;
}


内容概要:本文探讨了在MATLAB/SimuLink环境中进行三相STATCOM(静态同步补偿器)无功补偿的技术方法及其仿真过程。首先介绍了STATCOM作为无功功率补偿装置的工作原理,即通过调节交流电压的幅值和相位来实现对无功功率的有效管理。接着详细描述了在MATLAB/SimuLink平台下构建三相STATCOM仿真模型的具体步骤,包括创建新模型、添加电源和负载、搭建主电路、加入控制模块以及完成整个电路的连接。然后阐述了如何通过对STATCOM输出电压和电流的精确调控达到无功补偿的目的,并展示了具体的仿真结果分析方法,如读取仿真数据、提取关键参数、绘制无功功率变化曲线等。最后指出,这种技术可以显著提升电力系统的稳定性与电能质量,展望了STATCOM在未来的发展潜力。 适合人群:电气工程专业学生、从事电力系统相关工作的技术人员、希望深入了解无功补偿技术的研究人员。 使用场景及目标:适用于想要掌握MATLAB/SimuLink软件操作技能的人群,特别是那些专注于电力电子领域的从业者;旨在帮助他们学会建立复杂的电力系统仿真模型,以便更好地理解STATCOM的工作机制,进而优化实际项目中的无功补偿方案。 其他说明:文中提供的实例代码可以帮助读者直观地了解如何从零开始构建一个完整的三相STATCOM仿真环境,并通过图形化的方式展示无功补偿的效果,便于进一步的学习与研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值