小年快乐😊!
A. AABCDDEFE
记个数,在纸上写一写就明白怎么搞了.
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ios::sync_with_stdio(false);
int n;
cin>>n;
n-=1;
int a=n/100000+1;
int a1=n%100000/1000;
int b=n%1000/100;
int c=n%100/10;
int d=n%10;
ll num=(10*a+a)*10000000+a1*100000+(10*b+b)*1000+100*c+c+10*d;
cout<<num<<'\n';
return 0;
}B. Grid Rotations
比赛时候只能想出O(Q*H*W)的算法😥,想用map优化来着,可惜还是没能做出思维的突破(单独考虑横纵坐标).
赛后补题
看了Editorial后发现这题真的很巧妙.
按着他的思路写了一份代码,AC了.
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5e5+1e4;
int H,W;
char a[N];
int x[N];
int _x[N];
int y[N];
int _y[N];
inline int num(int x,int y)
{
return (x-1)*W+y;
}
int main() {
ios::sync_with_stdio(false);
cin>>H>>W;
for(int i=1;i<=H;i++)
{
x[i]=x[i+H]=i;
_x[i]=_x[i+H]=H+1-i;
}
for(int j=1;j<=W;j++)
{
y[j]=y[j+W]=j;
_y[j]=_y[j+W]=W+1-j;
}
for(int i=1;i<=H;i++)
{
for(int j=1;j<=W;j++)
cin>>a[num(i,j)];
}
int Q;
cin>>Q;
int x_=0,y_=0;
int x__,y__;
for(int i=1;i<=Q;i++)
{
cin>>x__>>y__;
if(i%2==1)
x_=(x_+x__)%H,y_=(y_+y__)%W;
else
x_=(x_+H-x__)%H,y_=(y_+W-y__)%W;
}
for(int i=1;i<=H;i++)
{
for(int j=1;j<=W;j++)
{
if(Q%2==0)
cout<<a[num(x[i+x_],y[j+y_])];
else
cout<<a[num(_x[H+i-x_],_y[W+j-y_])];
}
cout<<'\n';
}
return 0;
}