B在dfs的时候忘记判重了,fst。差点就可以大橙了...
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
定义f(x)为x各位的阶乘的乘积
给你a
让你求满足f(x)=f(a)的最大x,x不含0或1
这题就是把阶乘拆分
4!=2!*3!
6!=5!*3!
8!=2!*2!*2!*7!
9!=2!*3!*3!*7!
然后倒叙从大到小输出就好了
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
给你个n*m的矩阵,让你用1*2的矩阵覆盖。有些格子不能放。问你方案是否唯一。唯一则输出方案,不唯一则输出Not unique
贪心,每次找有唯一方案的格点放置矩形。看最后是否有剩余。有剩余则无解或者方案不唯一。否则输出放置方案
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
code:
#include<cmath>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int a[10001];
int s[10001];
int main()
{
int n;
scanf("%d",&n);
int i;
string x;
cin>>x;
for(i=1;i<=n;i++)
a[i]=x[i-1]-'0';
for(i=1;i<=n;i++)
{
if(a[i]==4)
{
s[3]++;
s[2]+=2;
}
else if(a[i]==8)
{
s[7]++;
s[2]+=3;
}
else if(a[i]==6)
{
s[5]++;
s[3]++;
}
else if(a[i]==9)
{
s[7]++;
s[2]++;
s[3]+=2;
}
else
s[a[i]]++;
}
i=9;
while(i>1)
{
if(s[i]>0)
{
s[i]--;
printf("%d",i);
}
else
i--;
}
return 0;
}
B. Drazil and Tiles
#include<cmath>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int map[3001][3001];
int a[3001][3001];
int xt[3001][3001];//1^ 2v 3< 4>
inline void dfs(int x,int y,int s)
{
if(s==2)
{
if(xt[x-1][y]==0&&a[x-1][y]>0)
{
a[x-1][y]--;
a[x][y]--;
if(a[x-1][y]==1)
dfs(x-1,y,1);
}
if(xt[x+1][y]==0&&a[x+1][y]>0)
{
a[x+1][y]--;
a[x][y]--;
if(a[x+1][y]==1)
dfs(x+1,y,1);
}
if(xt[x][y-1]==0&&a[x][y-1]>0)
{
a[x][y-1]--;
a[x][y]--;
if(a[x][y-1]==1)
dfs(x,y-1,1);
}
if(xt[x][y+1]==0&&a[x][y+1]>0)
{
a[x][y+1]--;
a[x][y]--;
if(a[x][y+1]==1)
dfs(x,y+1,1);
}
return ;
}
if(a[x][y+1]>0&&xt[x][y+1]==0)
{
xt[x][y]=3;
xt[x][y+1]=4;
a[x][y+1]--;
dfs(x,y+1,s+1);
}
else if(a[x][y-1]>0&&xt[x][y-1]==0)
{
xt[x][y]=4;
xt[x][y-1]=3;
a[x][y-1]--;
dfs(x,y-1,s+1);
}
else if(a[x+1][y]>0&&xt[x+1][y]==0)
{
xt[x][y]=1;
xt[x+1][y]=2;
a[x+1][y]--;
dfs(x+1,y,s+1);
}
else if(a[x-1][y]>0&&xt[x-1][y]==0)
{
xt[x][y]=2;
xt[x-1][y]=1;
a[x-1][y]--;
dfs(x-1,y,s+1);
}
return ;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int i,j;
string x;
for(i=1;i<=n;i++)
{
cin>>x;
for(j=1;j<=m;j++)
{
if(x[j-1]=='.')
map[i][j]=0;
else
map[i][j]=2;
}
}
for(i=1;i<=n;i++)
{
map[i][0]=-1;
map[i][m+1]=-1;
for(j=1;j<=m;j++)
{
map[0][j]=-1;
map[n+1][j]=-1;
if((i%2==1&&j%2==1||i%2==0&&j%2==0)&&map[i][j]!=2)
map[i][j]=0;
else if(map[i][j]!=2)
map[i][j]=1;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(map[i][j]==1)
{
if(map[i-1][j]==0)
a[i][j]++;
if(map[i+1][j]==0)
a[i][j]++;
if(map[i][j-1]==0)
a[i][j]++;
if(map[i][j+1]==0)
a[i][j]++;
}
if(map[i][j]==0)
{
if(map[i-1][j]==1)
a[i][j]++;
if(map[i+1][j]==1)
a[i][j]++;
if(map[i][j-1]==1)
a[i][j]++;
if(map[i][j+1]==1)
a[i][j]++;
}
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(a[i][j]==1)
{
a[i][j]--;
dfs(i,j,1);
}
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if((map[i][j]==0||map[i][j]==1)&&xt[i][j]==0)
{
printf("Not unique\n");
return 0;
}
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(map[i][j]==2)
printf("*");
else if(xt[i][j]==1)
printf("^");
else if(xt[i][j]==2)
printf("v");
else if(xt[i][j]==3)
printf("<");
else if(xt[i][j]==4)
printf(">");
}
printf("\n");
}
return 0;
}