网站更新文章,承德信息网,网站设计教学,网站开发提高加载速度CONTINUE...? ZOJ - 4033 题解#xff1a;先计算一下总数sum是否是偶数#xff0c;如果不是则不能分出来#xff0c;如果是则从后面开始分#xff0c;先把人分到1、3组#xff0c;分完sum / 2这些人#xff0c;如果恰好能够分成零#xff0c;那么剩下前面的都分到2、4组… CONTINUE...? ZOJ - 4033 题解先计算一下总数sum是否是偶数如果不是则不能分出来如果是则从后面开始分先把人分到1、3组分完sum / 2这些人如果恰好能够分成零那么剩下前面的都分到2、4组就可以了。如果不能那么就把当前剩下的它需要的x能够凑成sum/2将x这个地方的人分到1、3组。 #include cstdio
#include cstring
#include algorithm
#include queue
using namespace std;
typedef long long ll;
const ll maxn 100005;
char a[maxn];
ll b[maxn];
int main()
{ll t,n,i,j;scanf(%lld,t);while(t--){scanf(%lld %s,n, a 1);ll sum (n * (n 1)) / 2;if(sum % 2 ! 0){printf(-1\n);continue;}memset(b,0,sizeof(b));sum sum / 2;for(i n; i 1; i --){if(sum i){sum - i;if(a[i] 0)b[i] 1;elseb[i] 3;if(sum 0) break;}else{if(a[sum] 0) b[sum] 1;else b[sum] 3;break;}}for(i 1; i n; i ){if(b[i] 0){if(a[i] 0)printf(2);elseprintf(4);}else printf(%lld,b[i]);}printf(\n);}return 0;
}转载于:https://www.cnblogs.com/lcchy/p/10139459.html