[luogu3067 USACO12OPEN] 균형 잡힌 젖소 떼.
전송문
Solution
절반 검색 템플릿 문제는 각 점이 왼쪽 집합과 오른쪽 집합에 있거나 집합에 없는 것을 고려한 다음에 정렬을 합치면 된다
Code
//By Menteur_Hxy
#include
#include
#include
#include
#include
#include
#define Re register
#define Ms(a,b) memset(a,(b),sizeof(a))
#define Fo(i,a,b) for(Re int i=(a),_=(b);i<=_;i++)
#define Ro(i,a,b) for(Re int i=(b),_=(a);i>=_;i--)
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<16,stdin)),p1==p2?EOF:*p1++)
using namespace std;
typedef long long LL;
char buf[1<<16],*p1,*p2;
inline int read() {
int x=0,f=1; char c=getchar();
while(!isdigit(c)) {if(c=='-')f=-f;c=getchar();}
while(isdigit(c)) x=(x<<1)+(x<<3)+c-48,c=getchar();
return x*f;
}
inline void writ(int x) {
if(x>9) writ(x/10);
putchar(x%10+'0');
}
const int N=25,M=1e8+5;
int n,ans,tt1,tt2;
bool vis[1<ed) {
if(ed==n/2) T1[++tt1].val=sum,T1[tt1].cur=S;
else T2[++tt2].val=sum,T2[tt2].cur=S;//1
return ;
}
dfs(pos+1,ed,sum,S);
dfs(pos+1,ed,sum+da[pos],S|(1<b.val;}
int main() {
n=read();
Fo(i,1,n) da[i]=read();
dfs(1,n/2,0,0); dfs(n/2+1,n,0,0);
sort(T1+1,T1+1+tt1,cmp1);
sort(T2+1,T2+1+tt2,cmp2);
int l=1,r=1,las;
while(l<=tt1&&r<=tt2) {
while(r<=tt2&&T1[l].val+T2[r].val>0) r++;//2
las=r;
while(r<=tt2&&T1[l].val+T2[r].val==0) {
if(!vis[T1[l].cur|T2[r].cur])
vis[T1[l].cur|T2[r].cur]++,ans++;
r++;
}
l++;
if(T1[l-1].val==T1[l].val) r=las;//3
}
writ(ans-1);
return 0;
}
posted @
2018-10-22 17:00 Menteur_Hxy 읽기(
...) 설명(
...) 모음 편집
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.