问个可能很弱智的问题
  • 板块P1120 小木棍
  • 楼主断清秋
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/10/9 12:08
  • 上次更新2023/11/4 04:17:20
查看原帖
问个可能很弱智的问题
93266
断清秋楼主2021/10/9 12:08

RT,以下代码只有 27pts:

#include<bits/stdc++.h>
#define ri register int
#define back return
#define ll long long
using namespace std;
ll read()
{
	ll x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')
			f=-1;
		ch=getchar();	
	}
	while(ch>='0'&&ch<='9')
	{
		x=x*10+ch-'0';
		ch=getchar();
	}
	back x*f;
}
int n,len,sum,cnt,a[105],vis[105];
bool cmp(int a,int b)
{
	back a>b;
}
bool dfs(int now,int ln,int last)
{
	if(now>cnt)
		back 1;
	if(ln==len)
		back dfs(now+1,0,1);
	int fail=0; 
	for(ri i=last;i<=n;i++)	
		if(!vis[i]&&ln+a[i]<=len&&fail!=a[i])
		{
			vis[i]=1;
			if(dfs(now,ln+a[i],i+1))
				back 1;
			fail=a[i];
			vis[i]=0;
			if(!ln||ln+a[i]==len)
				back 0;
		}
	back 0;
}
int main()
{
    n=read();
    for(ri i=1;i<=n;i++)
    {
    	int x;
    	x=read();
    	if(x<=50)
    		a[++cnt]=x,sum+=x;
    }
    n=cnt;
    sort(a+1,a+n+1,cmp);
    for(ri len=a[1];len<=sum;len++)//如果删去 ri,即可AC
	{
		if(sum%len!=0)
			continue;
		cnt=sum/len;
		memset(vis,0,sizeof(vis));
		if(dfs(1,0,1))
		{
			cout<<len<<"\n";
			back 0;
		}
	}
    back 0;  
}

正如注释所说,如果删去 ri 就可以AC。

想问一下为什么在循环里定义 len 就会WA?

2021/10/9 12:08
加载中...