自打ICPC省赛结束之后,就在准备英语六级和期末考试,再没碰过代码。
直到放假之后,昨天晚上来了一场ABC,手感冰凉,rating–。😦😦😦
A:When?
题意:21:00加上延时的数字后的时间点是多少。
分析:由于这个延时小于100,当这个延时小于60,就输出21:XX的形式,当这个延时大于60,就输出22:XX的形式。
题解:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int n;
cin >> n;
if(n<60)
{
cout << "21:";
printf("%02d", n);
}
else
{
cout << "22:";
printf("%02d", n-60);
}
return 0;
}
B: Number Box
题意:给你一个长宽都是n的方格,方格的上下连通,左右连通。可以选择一个起点,向八个方向走,走n步取到n个数字最大是多少。
分析:由于N最大为10,可以使用暴力枚举的方法。
题解:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dx[9]={0,0,0,1,1,1,-1,-1,-1};
ll dy[9]={0,1,-1,0,1,-1,0,1,-1};
ll n, ma;
ll a[20][20];
ll calc(ll x, ll y, ll t)
{
ll res = a[x][y];
for(int i=1;i<n;i++)
{
x = (x+dx[t]+n)%n;
y = (y+dy[t]+n)%n;
res = res*10+a[x][y];
}
return res;
}
int main()
{
cin >> n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%1lld", &a[i][j]);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
for(int k=1;k<=8;k++)
{
ma = max(ma, calc(i,j,k));
}
}
}
cout << ma;
return 0;
}
C:Rotation
题意:在字符串上有两个操作,一个是将最后的几个字符放在开头,一个是输出从开头数第几个字符。
分析:为了不移动字符串以致复杂度变大,设置一个起始点p。
题解:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n, q, p;
string s;
int main()
{
cin >> n >> q;
cin >> s;
while(q--)
{
int t, x;
cin >> t >> x;
if(t==1)
{
p = (p+x)%n;
}
else
{
cout << s[(x-1-p+n)%n] << endl;
}
}
return 0;
}