(){}集训training结束is over大家all回家pass away
(){}集训training结束is over大家all放寒假putcoldfalse
(){}集训training结束is over大家all开心lifeistough
(){}集训training结束is over成为became唐人Tang
(){}最后一餐加面免费
(){}食堂修完一楼修二楼
(){}一小时A一题第二?
(){}解题:我不用dp?我是跳舞的线
(){}F:你好,我是像洪水一样的狗仔,专业阻止Will和MM浪漫
A
dfs先求出以1为根的树和每棵子树的便利值和大小,第二个dfs就能求出以每个节点为根的树的便利值,代码还没写。
B
八皇后升级版,暴力会TLE,用二进制简化再bfs(1:不能放)
#include
using namespace std;
long long n,all,row[20],ans;
char a[20][20];
void queen(int nr,int lr,int rl,int d){
if(nr==all){
++ans;
return;
}
long long ps=(~(nr|lr|rl|row[d]))&all,p;
while(ps){
p=ps&-ps;
ps-=p;
queen(nr+p,lr+p1,d+1);
}
return;
}
int main(){
freopen("queens.in","r",stdin);
freopen("queens.out","w",stdout);
cin>>n;
all=(1<<n)-1;
for(int i=1;ia[i][j];
if(a[i][j]=='.')row[i]|=1<<n-j;
}
}
queen(0,0,0,1);
cout<<ans;
return 0;
}
C
灵魂穿越无痛回头+简单公式=赛时唯一AC
#include
using namespace std;
int l,t,n,a;
char c;
int v[200001];
int main(){
freopen("maravi.in","r",stdin);
freopen("maravi.out","w",stdout);
cin>>l>>t>>n;
for(int i=1;i>a>>c;
if(c=='D'){
int s=(t+a)/l,s1=l*s;
if(s&1)++v[l-(t+a-s1)];
else{
++v[t+a-s1];
}
}
if(c=='L'){
int s=(abs(t-a)/l),s1=l*s;
if(s&1)++v[l-(t-a-s1)];
else{
++v[abs(t-a)-s1];
}
}
}
for(int i=0;i<=l;i++){
while(v[i]--){
cout<<i<<" ";
}
}
return 0;
}
D
赛时动规拿3个点,实际上用dancing links(不管别人怎么说我只想叫他跳舞的线)
E
动规题,转移式自己求,四维(dp[i][x][y][z]到第i个指令走到xy)
F
不多说,无敌狗仔怎么这么熟悉,这不洪水吗?赛时没时间打,赛后懒得打。
二言
谁也阻止不了想要浪漫的Will