现在的位置: 首页 > 综合 > 正文

130719解题报告

2019年02月10日 ⁄ 综合 ⁄ 共 2581字 ⁄ 字号 评论关闭

做的不是太好,而且现在对DFS越来越没信心了,不敢用,错过了一题。。

现在先给出前四题。

A:Flipping Game

简单的暴搞,开数组记录0和1的数量就行了

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>

using namespace std;

int a[105];
int main()
{
    int n,i,j,sum=0,s,k,mmax=0;
    scanf("%d",&n);
    for(i=1; i<=n; i++)
    {
        scanf("%d",&a[i]);
        sum+=a[i];
    }
    for(i=1; i<=n; i++)
    {
        for(j=i; j<=n; j++)
        {
            s = sum;
            for(k=i; k<=j; k++)
            {
                s -= a[k];
                s += (1-a[k]);
                if(s>mmax) mmax = s;
            }
        }
    }
    printf("%d\n",mmax);
    return 0;
}

B:Hungry Sequence 

单纯的筛选素数,Special Judge的题都能偷偷水^_^

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <algorithm>

using namespace std;

bool s[1500005];
void get()
{
    memset(s,0,sizeof(s));
    s[0] = s[1] = 1;
    for(int i = 2;i<1500000;i++)
    {
        if(s[i] == 0)
        {
            for(int j=i*2;j<1500000;j+=i)
                s[j] = 1;
        }
    }
}

int main()
{
    get();
    int n;
    scanf("%d",&n);
    int j = 3;
    printf("2");
    for(int i=1;i<n;i++)
    {
        while(s[j] == 1)
            j++;
        printf(" %d",j);
        j++;
    }
    printf("\n");
    return 0;
}

C:Magic Five 

去除数字使这个数变成五的倍数,题意不难,难在数据量上,所以需要用快速幂去摸来解决

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#define M 1000000007
using namespace std;
char s[100004];
int k;
long long f(long long a,long long b,long long &x,long long &y)
{
    long long ans,t;
    if(b==0)
    {
        x=1,y=0;
        return a;
    }
    ans=f(b,a%b,x,y);
    t=x,x=y,y=t-(a/b)*y;
    return ans;
}
long long p(long long base,long long n)
{
    long long r=1;
    while(n)
    {
        if(n&1)
            r=(r*base)%M;
        base = (base*base)%M;
        n>>=1;
    }
    return r;
}
int main()
{
    while(scanf("%s %d",s,&k)!=EOF)
    {
        long long a1=0;
        int len=strlen(s);
        for(int i=0; i<len; i++)
        {
            if(s[i]=='0'||s[i]=='5')
            {
                a1=(a1+p(2,i))%M;
            }
        }
        long long q = p(2,len);
        long long q1 = (q+M-1)%M;
        long long X,Y;
        f(q1,M,X,Y);
        X = (X+M)%M;
        long long qn_x = (p(q,k)-1)*X%M;
        long long ans = (a1*qn_x)%M;
        cout<<ans<<endl;
    }
    return 0;
}

D:Block Tower 

又是一道Special Judge,一如既往的偷偷水一下^_^

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>

using namespace std;

int n,m,l,shu;
int x[1000000];
int y[1000000];
char z[1000000];
char c;
char s[505][505];
bool used[505][505];
int dx[5] = {1,0,-1,0};
int dy[5] = {0,-1,0,1};

void dfs(int xx,int yy)
{
    l++;
    used[xx][yy] = 1;
    for(int i=0;i<4;i++)
    {
        if(s[xx+dx[i]][yy+dy[i]] == '.'&&used[xx+dx[i]][yy+dy[i]] == 0)
        {
            dfs(xx+dx[i],yy+dy[i]);
        }
    }
    if(l != 1)
    {
        x[shu] = xx;
        y[shu] = yy;
        z[shu] = 'D';
        shu++;
        x[shu] = xx;
        y[shu] = yy;
        z[shu] = 'R';
        shu++;
        s[xx][yy] = 'R';
    }
    l--;
}

int main()
{
    scanf("%d%d",&n,&m);
    memset(s,0,sizeof(s));
    memset(used,0,sizeof(used));
    for(int i=1;i<=n;i++)
    {
        c = getchar();
        for(int j=1;j<=m;j++)
        {
            s[i][j] = getchar();
        }
    }
    shu = 0;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(s[i][j] == '.')
            {
                x[shu] = i;
                y[shu] = j;
                z[shu] = 'B';
                shu++;
            }
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(s[i][j] == '.')
            {
                l = 0;
                dfs(i,j);
            }
        }
    }
    printf("%d\n",shu);
    for(int i=0;i<shu;i++)
    {
        printf("%c %d %d\n",z[i],x[i],y[i]);
    }
    return 0;
}

抱歉!评论已关闭.