小年快乐😊!
A. AABCDDEFE
记个数,在纸上写一写就明白怎么搞了.
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
::sync_with_stdio(false);
iosint n;
>>n;
cin-=1;
nint a=n/100000+1;
int a1=n%100000/1000;
int b=n%1000/100;
int c=n%100/10;
int d=n%10;
=(10*a+a)*10000000+a1*100000+(10*b+b)*1000+100*c+c+10*d;
ll num<<num<<'\n';
coutreturn 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() {
::sync_with_stdio(false);
ios>>H>>W;
cinfor(int i=1;i<=H;i++)
{
[i]=x[i+H]=i;
x[i]=_x[i+H]=H+1-i;
_x}
for(int j=1;j<=W;j++)
{
[j]=y[j+W]=j;
y[j]=_y[j+W]=W+1-j;
_y}
for(int i=1;i<=H;i++)
{
for(int j=1;j<=W;j++)
>>a[num(i,j)];
cin}
int Q;
>>Q;
cinint x_=0,y_=0;
int x__,y__;
for(int i=1;i<=Q;i++)
{
>>x__>>y__;
cinif(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)
<<a[num(x[i+x_],y[j+y_])];
coutelse
<<a[num(_x[H+i-x_],_y[W+j-y_])];
cout}
<<'\n';
cout}
return 0;
}