比赛链接:ABC378
比较简单的一次 ABC。
Problem A:
Code
#include <bits/stdc++.h>
using namespace std;
int main(){cin>>A[1]>>A[2]>>A[3]>>A[4];sort(A+1,A+5);if(A[1]==A[2] && A[3]==A[4])cout<<2<<endl;else{if(A[1]==A[2] || A[2]==A[3] || A[3]==A[4])cout<<1<<endl;elsecout<<0<<endl;}return 0;
}
Problem B:
Code
#include <bits/stdc++.h>
using namespace std;
int q[105],r[105];
int main(){int N;cin>>N;for(int i=1;i<=N;i++)cin>>q[i]>>r[i];int Q;cin>>Q;while(Q--){int t,d;cin>>t>>d;int ans=r[t]-d%q[t]+d;if(r[t]-d%q[t]<0)ans+=q[t];cout<<ans<<endl;}return 0;
Problem C:
Sol
直接拿一个 map 记录每个的即可。
Code
#include <bits/stdc++.h>
using namespace std;
map<int,int> B;
int main(){int N;cin>>N;for(int i=1;i<=N;i++){int A;cin>>A;if(B[A])cout<<B[A]<<endl;elsecout<<-1<<endl;B[A]=i;}return 0;
}
Problem D:
Sol
直接 dfs 即可。
Code
#include <bits/stdc++.h>
using namespace std;
const int dx[]={1,0,-1,0};
const int dy[]={0,1,0,-1};
bool vis[20][20];
char S[20][20];
int H,W,K,ans;
void dfs(int x,int y,int step){if(step==K){ans++;return;}vis[x][y]=true;for(int i=0;i<4;i++){int nx=x+dx[i],ny=y+dy[i];if(0<=nx && nx<H && 0<=ny && ny<W && S[nx][ny]=='.' && !vis[nx][ny])dfs(nx,ny,step+1);}vis[x][y]=false;
}
int main(){cin>>H>>W>>K;for(int i=0;i<H;i++){for(int j=0;j<W;j++)cin>>S[i][j];}for(int i=0;i<H;i++){for(int j=0;j<W;j++){if(S[i][j]=='.'){dfs(i,j,0);cout<<i<<' '<<j<<' '<<ans<<endl;}}}cout<<ans<<endl;return 0;
}