题目:
bitset:
==用bitset模拟每一位是否被称到,由于会出现在天平左右边,所以bitset会出现负数,模拟一个对称位置,将负数合并到正数部分,例如:bitset长度为9,则最中间下标4为0这个重量的位置,0~3为负数部分,5,8是正数部分
bitset这种容器是从右到左边的,起始位置为0,灵感来自于:链接: 瞎搞题.
#include <bits/stdc++.h>
using namespace std;
bitset<200021> ans, tmp;
//0的位置
#define W 100010
//总长度
#define len 200021
int n;
int arr[105];
void moni()
{
for (int i = 0; i < W; i++)
{
if (ans[i])
{
ans[len - 1 - i] = 1;
ans[i] = 0;
}
}
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
ans[W] = 1;
for (int i = 0; i < n; i++)
{
tmp.reset();
tmp[W] = 1;
tmp = tmp | (ans << arr[i]);
tmp = tmp | (ans >> arr[i]);
ans = ans | tmp;
moni();
}
cout << ans.count() - 1 << endl;
system("pause");
return 0;
}
bitset什么时候能不能向deque学习一下啊@bitset