直接从for循环从10000枚举到90000,如果i%128==0,答案就+1;
这题也是枚举就行。
奇数位置只能放对应的数字,偶数位置全排列,答案是10的阶乘。
这道题直接DFS一下就行,答案是4;
#include
#define CLOSE ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
//const int N=1e6;
typedef long long ll;
using namespace std;
int a[20]={0,1,2,1,1,1,1,5,5,4,-1,-1,-2,-3,-1,-9};
int ans=INT_MIN;
void dfs(int i,int x,int sum)//i为第几步,x为台阶数,sum为得分
{
if(i>=7)//超过7步了,不合法
{
return;
}
if(x==15)//到达第15层了
{
ans=max(ans,sum);
return;
}
for(int j=1;j<=4;j++)
{
dfs(i+1,x+j,sum+=a[x+j]);
}
}
int main()
{
dfs(1,0,0);
cout<
这题也是枚举。。三层for循环枚举i,j,k。
观察易得:行数i+列数j为偶数的被染成黑色。所以答案:奇数行的个数*奇数列的个数+偶数行的个数*偶数列的个数。
我们直接枚举a[i]-a[i-1],然后让这个长度去除以k,注意特判第一个和最后一个小块。
思维+组合数,第(n+1)/2一定是最大值n,我们只需要选(n-1)/2放到前面就行,选好了位置也就确定了,注意取模。
#include
#define CLOSE ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
//const int N=1e6;
typedef long long ll;
const ll mod=1000000007;
using namespace std;
ll n;
ll C(ll a,ll b)
{
ll x=1;
for(ll i=a,j=1;j<=b;i--,j++)
{
x=(x*i/j)%mod;
}
return x;
}
int main()
{
cin>>n;
n--;
ll ans=C(n,n/2);
cout<
BFS模板题,我们从任意一个1开始bfs,访问的地方都标记掉,bfs完成后,遍历st数组,如果遇到1的位置没有被标记过,一定不连通。
#include
#define CLOSE ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
const int N=510;
typedef long long ll;
using namespace std;
char a[N][N];
int st[N][N];
int n,m;
int wy[4][2]={
{1,0},{-1,0},{0,1},{0,-1}};
int qdx,qdy;
struct node{
int x,y;
};
queue q;
void bfs()
{
st[qdx][qdy]=1;
q.push({qdx,qdy});
while(!q.empty())
{
node one=q.front();
q.pop();
for(int i=0;i<=3;i++)
{
int xx=one.x+wy[i][0],yy=one.y+wy[i][1];
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&a[xx][yy]=='1'&&st[xx][yy]==0)
{
st[xx][yy]=1;
q.push({xx,yy});
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
if(a[i][j]=='1')
{
qdx=i,qdy=j;
}
}
}
bfs();
int flag=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]=='1'&&st[i][j]==0)
{
flag=1;
}
}
}
if(flag==1) cout<<"NO"<