2017百度之星

今天这服务器。。。。

第一题,百度一波儿定理,然后发现就是让求p-1的因子

#include
int main()
{
    int p;
    int cases; scanf("%d",&cases);
    while(cases--)
    {

        scanf("%d",&p);
        p--;
        int ans = 0;
        for(int i=1;i*i<=p;i++)
        {
            if(p%i==0)
            {
                if(i!=p/i) ans+=2;
                else ans+=1;
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}

第五题 暴力啊! 每次day++取模,特判2月就好

#include
#include
#include
using namespace std;
int n,m;
char s[20];
int monthday[15]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
    int cases; int year,month,day;
    scanf("%d",&cases);
    while(cases--)
    {
        scanf("%s",s);
        year = (s[0]-48)*1000+(s[1]-48)*100+(s[2]-48)*10+(s[3]-48);
        month = (s[5]-48)*10+(s[6]-48);
        day = (s[8]-48)*10+(s[9]-48);
        int ansmonth = month; int ansday = day;
        while(1)
        {
            int tmp = monthday[2];
            if((year%4==0&&year%100!=0)||year%400==0)
                tmp+=1;
            day += 7;
            if(month==2&&day>tmp)
            day%=tmp,month+=1;
            else if(month!=2&&day>monthday[month])
            {
                day%=monthday[month]; month++;
            }
            if(month>12) month%=12,year++;
            if(month==ansmonth&&day==ansday)
            {
                printf("%d\n",year);
                break;
            }
        }
    }
    return 0;
}

第6题,第一遍dfs看有没有1,没有直接输出-1.第二遍看有几个在边界的 0,是1的话输出0,是0的话输出1,否则输出-1.

#include
#include
int n,m;
char str[105][105];
int vis[105][105];
int dir[4][2] = {0,1,0,-1,1,0,-1,0};
void dfs(int x,int y)
{
    vis[x][y] = 1;
   // printf("%d %d\n",x,y);
    for(int i=0;i<4;i++)
    {
        int nx = x+dir[i][0];
        int ny = y+dir[i][1];
        if(nx<0||nx>=n||ny<0||ny>=m) continue;
        if(vis[nx][ny]||str[nx][ny]=='0') continue;
        dfs(nx,ny);
    }
}
int flag = 1;
void dfs2(int x,int y)
{
    //printf("%d %d\n",x,y);
    if(x==0||x==n-1||y==0||y==m-1) flag = 0;
    vis[x][y] = 1;
    for(int i=0;i<4;i++)
    {
        int nx = x+dir[i][0];
        int ny = y+dir[i][1];
        if(nx<0||nx>=n||ny<0||ny>=m) continue;
        if(vis[nx][ny]||str[nx][ny]=='1') continue;
        dfs2(nx,ny);
    }
}
int main()
{
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        for(int i=0;i

ACfun里有人说第二题数据有问题。第二题WA了两次,不知道为什么,应该就是一个镜像并查集啊啊啊。由于服务器的原因 让我一份AC的代码交了多次还要算罚时!!坑爹啊。


你可能感兴趣的:(2017百度之星)