开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情
emm,今天来介绍一个贵物,他学了一年算法,然后这次周赛做出了一道题,谁啊,这么菜,哦,我啊,那没事了正常,浅浅写了个题解。
就是很水的模拟,没啥好说的,枚举一下就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;
}