3
思路: 以四位数abcd为例,abcd = a * 1000 + b * 100 + c * 10 + d .
= ( a * 999 + b * 99 + c * 9 ) + ( a + b + c + d )
前面括号一定是9的倍数,也是3的倍数,那么只要a+b+c+d 是3的倍数就满足。
这就是为什么一个正整数x是3的倍数的条件是x每一位加起来的和是3的倍数.
那么可得P进制 只要求出( P - 1 ) 的因子即可得到答案。(eg:10 进制求9的因子 1 3 9 所以答案是 3 个)
Code:
#include
using namespace std;
int main(){
int T;
cin>>T;
while( T-- ){
int n;
cin>>n;
int t = sqrt(n);
int ans = 2;
for( int i = 2 ; i <= t ; i++ ){
if( (n-1) % i == 0 ) ans += 2;
}
if( t*t == n-1 ) ans--;
cout<
Code:
#include
using namespace std;
int month[13] = { 0 , 31 , 29 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31, 30 ,31 };
bool check(int y){
if( ( y % 4 == 0 && y % 100 != 0 ) || y % 400 == 0 ){
return true;
}
return false;
}
int f( int y , int m ,int d){
int ans = 0;
for( int i = 1 ; i < m ; i++ ){
if( i == 2 ){
if( check(y) ) ans += 29;
else ans+=28;
}else{
ans += month[i];
}
}
return ans + d;
}
int main(){
int T;
cin>>T;
int year , month , day;
while( T-- ){
scanf("%d-%d-%d",&year,&month,&day);
int ans = 0;
if( month == 2 && day == 29 ){
int pre = year;
for( int i = year + 4 ; ; i+=4 ){
if( !check(i) ) continue;
for( int j = pre ; j < i ; j++ ){
if( check(j) ){
ans += 366;
}else{
ans += 365;
}
}
if( ans % 7 == 0 ){
cout<
0 1 -1思路 :给每个图外面加上一层0,避免判断边界0的情况。然后直接BFS求出 连同块 0 和 1 的数量。
Code:
#include
using namespace std;
const int AX = 1e2+66;
int mp[AX][AX];
int vis[AX][AX];
int n,m;
struct Node
{
int x,y;
Node(){} Node( int a, int b ){ x = a ; y = b ;}
}pos,q;
int dir[4][2] = {
{1,0},
{-1,0},
{0,-1},
{0,1},
};
queueque;
bool check(int x ,int y , int z ){
if( x >= 0 && x <= n && y >= 0 && y <= m && vis[x][y] == 0 && mp[x][y] == z ){
return true;
}
return false;
}
void bfs(int x, int y){
que.push(Node(x,y));
vis[x][y] = 1;
while( !que.empty() ){
q = que.front();
que.pop();
for( int i = 0 ; i < 4 ; i++ ){
int xx = q.x + dir[i][0];
int yy = q.y + dir[i][1];
if( check(xx,yy,mp[x][y]) ){
que.push( Node(xx,yy) );
vis[xx][yy] = 1;
}
}
}
}
int num[2];
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
char s;
while( cin>>n>>m ){
memset(vis,0,sizeof(vis));
memset(num,0,sizeof(num));
memset(mp,0,sizeof(mp));
for( int i = 1 ; i <= n ; i++ ){
for( int j = 1 ; j <= m ; j++ ){
cin>>s;
mp[i][j] = s - '0';
}
}
n++; m++;
for( int i = 0 ; i <= n ; i++ ){
for( int j = 0 ; j <= m ; j++ ){
if( !vis[i][j] ){
num[mp[i][j]] ++;
bfs( i , j );
}
}
}
if( num[1] == 1 && num[0] == 1 ) cout<<1<