acwing 第89次周赛

54 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情

emm,今天来介绍一个贵物,他学了一年算法,然后这次周赛做出了一道题,谁啊,这么菜,哦,我啊,那没事了正常,浅浅写了个题解。

AcWing 4803. 满足的数

就是很水的模拟,没啥好说的,枚举一下就ok了。

代码

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <map>
#include <set>
#include <iomanip>
#include <cmath>
#include <unordered_map>
#include <stack>
#include <queue>
#define ll long long
#define lowbit(x) x&(-x)
using namespace std;
typedef pair<int,int> PII;
typedef pair<string,int> PSI;
int gcd(int x,int y){
   return y?gcd(y,x%y):x;
}
ll qmi(ll x,ll y,int mod){
   ll res=1;
   while(y){
       if(y&1) res=res*x%mod;
       y>>=1;
       x=x*x%mod;
   }
   return res;
}
const int N=110;
int a[N],n,s=0;
int main(){
   ios::sync_with_stdio(0);
   cin.tie(0),cout.tie(0);
   cin>>n;
   for(int i=1;i<=n;i++){
       cin>>a[i];
       s+=a[i];
   }
   int ans=0;
   for(int x=1;x<=5;x++){
       if((s+x)%(n+1)!=1) ans++;
   }
   cout<<ans<<"\n";
   return 0;
}

接下来就是相当长一段时间的debug!

AcWing 4804. 构造矩阵 首先这个第二题我是一眼就看出了思路,然后很顺利的写完,发现过了17个点。。。,然后开始debug,就是找不到问题,其实思路很简单,我开始就是想用h和l两个数组记录行和列是否应该被全部赋成0,然后在b矩阵里面如果行和列都被标记过,但a[i][j]=1,那么显然不行,然后接下来就先把b赋值成,然后一步步看哪些应该变成0,但是wa了,赛后发现第18个数组就很离谱,还需要在判断一个每个1对应的行和列是不是一定有不为0的数字。

代码

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <map>
#include <set>
#include <iomanip>
#include <cmath>
#include <unordered_map>
#include <stack>
#include <queue>
#define ll long long
#define lowbit(x) x&(-x)
using namespace std;
typedef pair<int,int> PII;
typedef pair<string,int> PSI;
int gcd(int x,int y){
    return y?gcd(y,x%y):x;
}
ll qmi(ll x,ll y,int mod){
    ll res=1;
    while(y){
        if(y&1) res=res*x%mod;
        y>>=1;
        x=x*x%mod;
    }
    return res;
}
const int N=110;
int n,m;
int a[N][N],b[N][N];
bool h[N],l[N];
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    memset(h,false,sizeof h);
    memset(l,false,sizeof l);
    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]==0){
                h[i]=true;
                l[j]=true;
            }
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(a[i][j]==1){
                if(h[i] && l[j]){
                    cout<<"NO"<<"\n";
                    return 0;
                }
            }
        }
    }
    cout<<"YES"<<"\n";
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            b[i][j]=1;
        }
    }
    for(int i=1;i<=n;i++){
        for(int k=1;k<=m;k++){
            if(h[i]){
                b[i][k]=0;
            }
        }
    } 
    for(int j=1;j<=m;j++){
        for(int k=1;k<=n;k++){
            if(l[j]){
                b[k][j]=0;
            }
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cout<<b[i][j]<<" ";
        }
        cout<<"\n";
    }
    return 0;
}

AcWing 4805. 加减乘 当时卡了很长时间的b,然后我就来看c,一看不是很简单的dp吗,然后第一次过了5个点,因为没开long long,第二次过了12个点,一直在看哪里出了问题,后来看了题解发现,没考虑奇数的乘法转移。。

代码

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <map>
#include <set>
#include <iomanip>
#include <cmath>
#include <unordered_map>
#include <stack>
#include <queue>
#define ll long long
#define lowbit(x) x&(-x)
using namespace std;
typedef pair<int,int> PII;
typedef pair<string,int> PSI;
int gcd(int x,int y){
    return y?gcd(y,x%y):x;
}
ll qmi(ll x,ll y,int mod){
    ll res=1;
    while(y){
        if(y&1) res=res*x%mod;
        y>>=1;
        x=x*x%mod;
    }
    return res;
}
const int N=2e7+10;
ll dp[N];
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int n,x,y;
    cin>>n>>x>>y;
    //memset(dp,0x3f,sizeof dp);
    for(int i=0;i<N-5;i++){
        dp[i]=1e16;
    }
    dp[0]=0;
    for(int i=1;i<=n;i++){
        dp[i]=min(dp[i],dp[i-1]+x);
        dp[i]=min(dp[i],dp[i+1]+x);
        dp[i]=min(dp[i],dp[(i+1)/2]+y);
    }
    cout<<dp[n]<<"\n";
    return 0;
}