AtCoder Beginner Contest151参赛感悟

Posted njwsf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AtCoder Beginner Contest151参赛感悟相关的知识,希望对你有一定的参考价值。

连打了三天的比赛,有点困技术图片

 
这次比赛有点坑人,不过还是加分了。虽然比赛时我第五题没有对,但是我还是会讲六题的题解。
 
AB题太水了,就不多讲了。
 
C题也比较水,但是比赛时没发现如果一题不对就不算WA的次数(结果WA了),这里要注意一下。
好了,除了这个应该没其他的难处了,
代码:
技术图片
#include
#define ll long long
#define F first
#define S second
#define P pair
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define V vector
#define RE return
#define ALL(a) a.begin(),a.end()
#define MP make_pair
#define PB push_back
#define PF push_front
#define FILL(a,b) memset(a,b,sizeof(a))
using namespace std;
int f[100005],t[100005];
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    int ans=0;
    int n,m;
    cin>>n>>m;
    string s;
    int x,sum=0;
    FOR(i,1,m) {
        cin>>x>>s;
        if(f[x])continue;
        if(s=="AC") {
            ans+=t[x];
            sum++;
            f[x]=1;
        } else {
            t[x]++;
        }
    }
    cout<<sum<< <<ans;
    return 0;
}
View Code

D题目

D题这里只要纯暴力,直接枚举两点,跑最短路,就能求出答案(太水了。。。。。)。
直接上代码:
 
技术图片
#include
#define ll long long
#define F first
#define S second
#define P pair
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define V vector
#define RE return
#define ALL(a) a.begin(),a.end()
#define MP make_pair
#define PB push_back
#define PF push_front
#define FILL(a,b) memset(a,b,sizeof(a))
using namespace std;
int n,m;
bool f[25][25],vis[25][25];
struct node {
    int h,l;
    int step;
};
queue q;
int fx[4][2]= {
    0,1,
    0,-1,
    1,0,
    -1,0
};
int bfs(int x,int y,int zx,int zy) {
    while(!q.empty())q.pop();
    node cur,t;
    cur.h=x;
    cur.l=y;
    cur.step=0;
    q.push(cur);
    memset(vis,0,sizeof(vis));
    while(!q.empty()) {
        cur=q.front();
        q.pop();
        x=cur.h;
        y=cur.l;
        if(x<1||x>n||y<1||y>m)continue;
        if(f[x][y])continue;
        if(vis[x][y])continue;
        vis[x][y]=1;
        if(zx==x&&zy==y) {
            return cur.step;
        }
        FOR(i,0,3) {
            t.h=x+fx[i][0];
            t.l=y+fx[i][1];
            t.step=cur.step+1;
            q.push(t);
        }
    }
    return -2147483647;
}
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    char c;
    cin>>n>>m;
    for(int i=1; i<=n; i++) {
        FOR(j,1,m) {
            cin>>c;
            if(c==#)f[i][j]=1;
        }
    }
    int maxi=0;
    FOR(i,1,n) {
        FOR(j,1,m) {
            FOR(i1,1,n) {
                FOR(j1,1,m) {
                    maxi=max(maxi,bfs(i,j,i1,j1));
                }
            }
        }
    }
    cout<<maxi;
    return 0;
}
View Code

 

E题有点坑,比赛时不会用C++求隔板法的方案数,结果就做不出来,弃题了。
但是赛后发现好水。。。
 
先把所有的数从小到大排序。枚举每一个数a[i],算有多少种方案使得它为最小,有多少方案使得它最大。再用总和减去最小方案数乘a[i],再加上最大方案数乘a[i],最后输出总和。
 
这里怎样算出方案数:
1.最大
那么就是必须选这个数,剩下的数从小于等于它到书中选。
2.最小
也是必须选这个数,剩下的数从大于等于它到书中选。
这里用排列组合求解。
 
附上代码:
#include
#define int long long
#define F first
#define S second
#define P pair
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define V vector
#define RE return
#define ALL(a) a.begin(),a.end()
#define MP make_pair
#define PB push_back
#define PF push_front
#define FILL(a,b) memset(a,b,sizeof(a))
using namespace std;
int inv[100005],finv[100005],f[100005];
int n,a[100005],mod=1000000007;
void C() {
    f[0]=1;
    finv[0]=1;
    finv[1]=1;
    f[1]=1;
    inv[1]=1;
    FOR(i,2,n) {
        f[i]=f[i-1]*i%mod;
        inv[i]=mod-inv[mod%i]*(mod/i)%mod;
        finv[i]=finv[i-1]*inv[i]%mod;
    }
}
int c(int n,int k) {
    if(n
            return f[n]*(finv[k]*finv[n-k]%mod)%mod;
}
signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    int k;
    cin>>n>>k;
    FOR(i,1,n)cin>>a[i];
    sort(a+1,a+n+1);
    C();
    int ans=0;
    FOR(i,1,n) {
        ans+=c(i-1,k-1)*a[i]%mod;
        ans=(ans+mod)%mod;
        ans-=c(n-i,k-1)*a[i]%mod;
        ans=(ans+mod)%mod;
    }
    cout<<ans;
    return 0;
}

 

好了,终于写完了。
这次的水平又下降了一点技术图片,下次继续努力技术图片
 

以上是关于AtCoder Beginner Contest151参赛感悟的主要内容,如果未能解决你的问题,请参考以下文章

Atcoder Beginner Contest 257

AtCoder Beginner Contest 154 题解

AtCoder Beginner Contest 228

AtCoder Beginner Contest 103

AtCoder Beginner Contest 115 题解

AtCoder Beginner Contest 242