G
这种题还是先全部把相应字符转为数字表示再最后输出,不然直接模拟,会麻烦很多很多
#include <bits/stdc++.h>
using namespace std ;
int n,xx,yx;
int ma[1000][1000];
void pp() {
for(int i=1;i<=yx;i++) {
for(int j=1;j<=xx;j++) {
if(ma[j][i]==1) cout<<"*";
if(ma[j][i]==2) cout<<".";
if(ma[j][i]==3) cout<<"@";
if(ma[j][i]==0) cout<<".";
}
cout<<endl;
}
cout<<endl;
}
void solve(int x,int y,int i) {
x--;
y--;
for(int j=1;j<=2*n+3;j++) {
for(int k=1;k<=2*n+3;k++) {
if(i==1) {
if(j==k || (j==1 || j==2*n+3) )
ma[j+x][k+y]=3;
else ma[j+x][k+y]=2;
}
if(i==2) {
if(j==1) ma[j+x][k+y]=3;
if(k==1 || k==n+2) ma[j+x][k+y]=3;
}
if(i==3) {
if(j==1) ma[j+x][k+y]=3;
if(k==2*n+3) ma[j+x][y+k]=3;
}
if(i==4) {
if(k==1 || k==n+2 || k==2*n+3)
ma[j+x][y+k]=3;
if(j==1 &&k<=n+2) ma[j+x][y+k]=3;
if(j==2*n+3 && k>=n+3) ma[j+x][y+k] =3;
}
}
}
//pp();
}
void zz(int x,int y) {
x--;
y--;
for(int i=1;i<=n+1;i++) {
for(int j=1;j<=2*n+3;j++) {
ma[x+i][y+j]=2;
}
}
// pp();cout<<endl;
}
int main() {
// int ma[1000][1000];
memset(ma,0,sizeof(ma));
cin>>n;
xx=13*n+19,yx=4*n+5;
for(int i=1;i<=xx;i++) {
ma[i][1]=1;
ma[i][yx]=1;
}
for(int i=1;i<=yx;i++) {
ma[1][i]=1;
ma[xx][i]=1;
}
for(int i=2;i<xx;i++) {
for(int j=2;j<=n+1;j++) {
ma[i][j]=2;
}
for(int j=3*n+5;j<=yx-1;j++) {
ma[i][j]=2;
}
}
zz(2,n+2);
zz(3*n+6,n+2);
zz(6*n+10,n+2);
zz(9*n+14,n+2);
zz(12*n+18,n+2);
// pp();
solve(n+3,n+2,1);
solve(n+3+(3*n+4),n+2,2);
solve(n+3+2*(3*n+4),n+2,3);
solve(n+3+3*(3*n+4),n+2,4);
pp();
return 0;
}
J
签到
#include <bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
int a,b,c,x;
cin>>a>>b>>c>>x;
int x1=x-c,x2=x-(b-c);
int k=a-2*b;
int ok=0;
if(k) ok|=(x1%k==0) || (x2%k==0);
else ok|=(x1==0) || (x2==0);
if(ok) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
M
表面上是一个博弈题,其实是个dp
#include<bits/stdc++.h>
#define M 505
using namespace std;
char str[M][M];
int n,m;
char dp[M][M][2];
int dfs(int x,int y,int f){
if(str[x][y]=='A')return 1; //?
if(str[x][y]=='B') return 4;//?
if(x==n&&y==m)return dp[x][y][f]=2;//??
char &t=dp[x][y][f];
if(t==-1){
if(f==0){
t=0;
if(x+1<=n)t|=dfs(x+1,y,f^1);
if(y+1<=m)t|=dfs(x,y+1,f^1);
}else{
t=7;
if(x+1<=n)t&=dfs(x+1,y,f^1);
if(y+1<=m)t&=dfs(x,y+1,f^1);
}
}
return t;
}
void solve(){
cin>>n>>m;
for(int i=1;i<=n;i++)scanf("%s",str[i]+1);
memset(dp,-1,sizeof(dp));
int t=dfs(1,1,0);
printf("%s", t&1?"yes":"no");
printf(" %s",t&2?"yes":"no");
printf(" %s\n",t&4?"yes":"no");
}
int main(){
int T;
cin>>T;
while(T--) solve();
return 0;
}