先写题解吧
这次题解包括但不全包括做过的题目(水题、简单题不计题解)。题解包括CodeForeces、PTA天梯题组、以及其他竞赛题目。
若有错误还请指出
本来是道简单题的,但是我好像做复杂了。
比较值得注意的是后面没有多余空格,直接换行。
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int level = 1;
int cost = 2 * pow(level, 2) - 1;
char c;
int n;
cin >> n >> c;
// if(n < 7)
// {
// cout << n;
// return 0;
// }
while(n - cost >= 0)
{
level ++;
cost = 2 * pow(level, 2) - 1;
// cout << "Now need " << cost << endl;
}
level --;
// cout << "level = " << level << endl;
cost = 2 * pow(level, 2) - 1;
int rest = n - cost;
int Limit = -1, lim = level;
for(int i = 1;i <= 2 * level - 1;i ++)
{
if(i == level + 1) Limit = -Limit;
lim += Limit;
// cout << lim << endl;
for(int j = 1;j <= 2 * level - 1;j ++)
{
// cout << abs(j - level) << ":" << lim << endl;
if(abs(j - level) <= lim && j < level + lim + 1)
{
cout << c;
}
else if(j <= level)
{
cout << ' ';
}
else break;
}
cout << endl;
}
cout << rest << endl;
return 0;
}
/*
ooo ooooo ooooooo
o ooo ooooo
ooo o ooo
ooo o
ooooo ooo
ooooo
ooooooo
*/
先用while取得能获得的沙漏的最大层数,然后沙漏的层数和大小的关系就是2 * n^2 - 1
初始化范围为最大,即abs(j - level) <= lim && j < level + lim + 1
j <= level 用于判断是否位于前半段,否则在后半段不满足时直接换行,符合输出条件
初始化范围递减,越往下打印越细
最后根据大小和层级,在到达最小的位置时更变范围为递增,继续打印直到到达大小
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main ()
{
ios::sync_with_stdio(false);
ll n;
cin >> n;
ll st = 2, len = 0;
ll tmpst = 2, tmplen = 0;
// cout << (ll)sqrt(n) << endl;
ll lim = (ll)sqrt(n);
ll tmpd = n;
for(ll i = 2;i <= lim + 1;i ++)
{
if(n % i == 0)
{
ll divn = i;
tmplen = 0;
tmpd = n;
// cout << "Can div " << i << " and now tmplen = " << tmplen << endl;
while(tmpd != 1 && tmpd % divn == 0)
{
tmpd /= divn;
tmplen ++;
divn ++;
}
// cout << "Can div " << i << " and now tmplen = " << tmplen << endl;
}
if(tmplen > len)
{
len = tmplen;
st = tmpst;
}
tmpst = i + 1;
tmplen = 0;
}
if(tmplen > len)
{
len = tmplen;
st = tmpst;
}
if(len == 0)
{
len = 1;
st = n;
}
cout << len << endl;
for(ll i = st;i < st + len - 1;i ++)
{
cout << i << "*";
}
cout << len + st - 1 << endl;
return 0;
}
主要就是从2到n的平方根的遍历和连续判断
若i = 3时n能被3整除(余数为0),则进入循环判断i = 4时、i = 5 时... ...直到不能整除为止
在跳出连续判断后,取长度的最大值并记录最大值时开头的数字
在遍历全部结束后,最后从最大值开头数字开始循环输出最大值开头数字 + i,即连续数字
#include <bits/stdc++.h>
using namespace std;
int main()
{
string a, b;
getline(cin, a, '\n');
getline(cin, b, '\n');
int lena = a.size();
int lenb = b.size();
for(int i = 0;i < lenb;i ++)
{
char c = b[i];
for(int j = 0;j < a.size();j ++)
{
if(a[j] == c)
{
a.erase(j, 1);
j --;
}
}
}
cout << a;
return 0;
}
先输入两段字符串a、b,使用getline(因为我用的string)
再遍历从b[0]到b[n]的字符(n为b的长度),使用find函数
如果a.find(b[i]) < a.size(),即找到了b[i]在a中的位置,那么就把a[a.find(b[i])]删掉,即删掉找到的那个位置的字符,这里使用erase函数
最后把处理完的字符串a输出。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin >> T;
int vis[100000] = {0};
for(int t = 0;t < T;t ++)
{
int n;
cin >> n;
for(int i = 0;i < n;i ++)
{
int num;
cin >> num;
if(n > 1)
{
vis[num] = 1;
}
}
}
int n;
cin >> n;
int alone = 0;
int first = 1;
for(int i = 0;i < n;i ++)
{
int num;
cin >> num;
if(!vis[num])
{
if(!first) cout << " ";
else
{
first = 0;
}
if(num < 10000) cout << "0";
if(num < 1000) cout << "0";
if(num < 100) cout << "0";
if(num < 10) cout << "0";
cout << num;
vis[num] = 1;
alone = 1;
}
}
if(!alone)
{
cout << "No one is handsome";
}
cout << '\n';
return 0;
}
范围还可以,用数组去存“这个人有没有朋友"
如果在输入朋友圈的阶段,朋友圈人数>=2,那么就把接下来的输入加到数组里
最后得到了完整的vis数组记录,接下来查询阶段只要vis[i] = 0的,特殊化输出即可
用alone去标记“是否有人没有朋友”,最后特判输出
#include <bits/stdc++.h>
using namespace std;
queue<char> qG;
queue<char> qP;
queue<char> qL;
queue<char> qT;
int main()
{
string str;
cin >> str;
int len = str.size();
for(int i = 0;i < len;i ++)
{
char c = str[i];
if(c >= 'a') c -= 32;
switch (c)
{
case 'G':
qG.push('G');
break;
case 'P':
qP.push('P');
break;
case 'L':
qL.push('L');
break;
case 'T':
qT.push('T');
break;
}
}
while(!qG.empty() || !qP.empty() || !qL.empty() || !qT.empty())
{
if(!qG.empty())
{
cout << qG.front();
qG.pop();
}
if(!qP.empty())
{
cout << qP.front();
qP.pop();
}
if(!qL.empty())
{
cout << qL.front();
qL.pop();
}
if(!qT.empty())
{
cout << qT.front();
qT.pop();
}
}
return 0;
}
其实这道题根本不用队列存的... ...根本不用... ...用数组就行了,我写完了才醒悟。
不过写都写完了,那就给他过了吧。
为什么这道题值20分?
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
char c;
cin >> n >> c;
getchar();
string str;
getline(cin, str, '\n');
int len = str.size();
if(len > n)
{
// cout << "DO" << endl;
int pos = len - n;
str.erase(0, pos);
}
else if(len < n)
{
for(int i = 0;i < n - len;i ++)
{
str = c + str;
}
}
cout << str;
return 0;
}
总的来说就是长度判断,然后决定是加是减。
加的话循环str = c + str就行了
减得话str.erase(0, pos)就行了(用substr也行)
比较水
#include <bits/stdc++.h>
using namespace std;
struct stu {
string name;
double guess;
};
int main()
{
int n;
cin >> n;
struct stu stus[n];
double sum = 0;
for(int i = 0;i < n;i ++)
{
cin >> stus[i].name >> stus[i].guess;
sum += stus[i].guess;
}
double aver = sum / n;
aver /= 2.0;
int index = 0;
for(int i = 0;i < n;i ++)
{
if(abs(stus[i].guess - aver) < abs(stus[index].guess - aver))
{
index = i;
}
}
cout << fixed << setprecision(0) << aver << " " << stus[index].name;
return 0;
}
结构体+遍历输入+遍历找最接近的值和位置
然后最后再输出
思路清晰
然后是CF的题目
#include <bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin >> T;
getchar();
for(int t = 0;t < T;t ++)
{
string a;
char c;
cin >> a >> c;
if(a.size() <= 1 && a[0] != c)
{
cout << "NO" << endl;
continue;
}
int pos = 0;
int OK = 0;
while(pos < a.size())
{
// cout << pos << endl;
if(a[pos] != c)
{
pos ++;
continue;
}
if((pos + 1) % 2 == 1)
{
OK = 1;
break;
}
else
{
pos ++;
continue;
}
}
if(OK)
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
}
return 0;
}
这道题看是不是奇数位即可,如果要的字符在奇数位,那么就输出"Yes",否则输出"No"
对于相同的字符,遍历判断即可
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int T;
cin >> T;
for(int t = 0;t < T;t ++)
{
ll l, r, a;
cin >> l >> r >> a;
if(a == 1)
{
cout << 2 * r << endl;
}
else
{
if(r > a)
{
while(r - a > a && r - a >= l)
{
r -= a;
}
if(r % a == 0) r --;
ll x1 = r / a + r % a;
if(l < a)
{
ll x2 = (a - 1) / a + (a - 1) % a;
ll x = max(x1, x2);
cout << x << endl;
}
else
{
cout << x1 << endl;
}
}
else
{
if(r == a && l < a) r --;
ll x = r / a + r % a;
cout << x << endl;
}
}
}
return 0;
}
比较关键的公式是取余的最大值就是 a = a - a % b - 1
再加几个范围判断就可以过了
如果a = 1比较特殊,得额外判断。
#include <bits/stdc++.h>
using namespace std;
struct node {
int index;
int pos;
int wei;
};
bool cmp1(node a, node b)
{
return a.wei < b.wei;
}
bool cmp2(node a, node b)
{
return a.pos < b.pos;
}
int main()
{
int T;
cin >> T;
for(int t = 0;t < T;t ++)
{
getchar();
getchar();
int n, m;
cin >> n >> m;
struct node nodes[m];
for(int i = 0;i < m;i ++)
{
cin >> nodes[i].pos >> nodes[i].wei;
nodes[i].index = i + 1;
}
sort(nodes, nodes + m, cmp1);
sort(nodes, nodes + 2 * n, cmp2);
int sum = 0;
for(int i = 0;i < 2 * n;i ++)
{
sum += nodes[i].wei;
}
cout << sum << endl;
int posl = 0, posr = 2 * n - 1;
for(int i = 0;i < n;i ++)
{
cout << nodes[posl].index << " " << nodes[posr].index << endl;
posl ++;
posr --;
}
cout << endl;
}
return 0;
}
取最小的几段,只要加2个sort就行。
第一个sort把它们的权值从小到大排。
第二个sort根据用户输入的n,排前 2*n个,按照下标来排。
最后分别从前2*n的两端往中间取、输出即可。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin >> T;
for(int i = 0;i < T;i ++)
{
int n;
cin >> n;
if(n == 1)
{
cout << 1 << endl;
}
else
{
long long ans = pow(2, n) - 1;
cout << ans << endl;
}
}
return 0;
}
可以直接找规律,得到最终胜利的是2^n - 1
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int T;
cin >> T;
for(int i = 0;i < T;i ++)
{
int n;
cin >> n;
vector<ll> vec(0);
int can = 1;
for(int i = 1;i <= n;i ++)
{
ll tmp = pow(3, i - 1);
if(tmp > 1000000000)
{
cout << "NO" << endl;
vec.clear();
can = 0;
break;
}
else
{
vec.push_back(tmp);
}
}
if(can)
{
cout << "YES" << endl;
for(int i = 0;i < n;i ++)
{
cout << vec[i] << " ";
}
cout << endl;
}
}
return 0;
}
其实这道题就是个等比数列,首项为1,公比为3。这是符合题目要求的最小数组。
如果到最后的值大于1e9,那么就输出No,反之则输出Yes并输出整个数组即可。
还有一些最近天梯打的比赛题目(就不写水题题解了)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll const INF = 1e9 + 7;
ll n, m, T;
int main()
{
string str;
cin >> str;
int pos = 0;
string tmp;
ll sum = 0;
while(pos < str.size())
{
if(str[pos] >= '0' && str[pos] <= '9')
{
tmp = tmp + str[pos];
}
else
{
ll temp = atoll(tmp.c_str());
sum += temp;
tmp = "";
}
pos ++;
}
cout << sum << endl;
return 0;
}
字符串操作提取,提取到临时字符串里,然后用atoll函数转成long long类型,加起来就可以。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll const INF = 1e9 + 7;
ll n, m, T;
map<string, int> WTN;
map<int, string> NTW;
void init()
{
WTN["zero"] = 0;
WTN["one"] = 1;
WTN["two"] = 2;
WTN["three"] = 3;
WTN["four"] = 4;
WTN["five"] = 5;
WTN["six"] = 6;
WTN["seven"] = 7;
WTN["eight"] = 8;
WTN["nine"] = 9;
WTN["ten"] = 10;
NTW[0] = "zero";
NTW[1] = "one";
NTW[2] = "two";
NTW[3] = "three";
NTW[4] = "four";
NTW[5] = "five";
NTW[6] = "six";
NTW[7] = "seven";
NTW[8] = "eight";
NTW[9] = "nine";
NTW[10] = "ten";
NTW[11] = "eleven";
NTW[12] = "twelve";
NTW[13] = "thirteen";
NTW[14] = "fourteen";
NTW[15] = "fifteen";
NTW[16] = "sixteen";
NTW[17] = "seventeen";
NTW[18] = "eighteen";
NTW[19] = "nineteen";
NTW[20] = "twenty";
}
int main()
{
init();
cin >> T;
for(int t = 0;t < T;t ++)
{
string a, b;
cin >> a >> b;
int a1 = WTN[a];
int b1 = WTN[b];
int c = a1 + b1;
cout << NTW[c] << endl;
}
return 0;
}
map + 加法... ...
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll const INF = 1e9 + 7;
int n, m, T;
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
int rdic[4] = {3, 2, 0, 1};
int main()
{
int k;
cin >> k;
n = (int)sqrt(k);
m = k / n;
swap(n, m);
// cout << n << " " << m << endl;
int a[n + 1][m + 1] = {0};
int vis[n + 1][m + 1] = {0};
for(int i = 0;i < n;i ++)
{
for(int j = 0;j < m;j ++)
{
vis[i][j] = 0;
}
}
int posx = 0, posy = 0;
vis[posx][posy] = 1;
int dic = 3;
int b[k];
for(int i = 0;i < k;i ++)
{
cin >> b[i];
}
sort(b, b + k);
int pos = k - 1;
for(int i = 0;i < k;i ++)
{
// cout << posx << " " << posy << endl;
a[posx][posy] = b[pos --];
// cout << vis[2][2] << endl;
if(posx + dx[dic] >= n || posx + dx[dic] < 0 || posy + dy[dic] >= m || posy + dy[dic] < 0 || vis[posx + dx[dic]][posy + dy[dic]])
{
// if(posx + dx[dic] >= n) cout << "r1" << endl;
// else if(posx + dx[dic] < 0) cout << "r2" << endl;
// else if(posy + dy[dic] >= m) cout << "r3" << endl;
// else if(posy + dy[dic] < 0) cout << "r4" << endl;
// cout << "Change Dic to " << rdic[dic] << endl;
dic = rdic[dic];
}
vis[posx][posy] = 1;
posx += dx[dic];
posy += dy[dic];
}
for(int i = 0;i < n;i ++)
{
for(int j = 0;j < m - 1;j ++)
{
cout << a[i][j] << " ";
}
cout << a[i][m - 1];
cout << endl;
}
return 0;
}
我先用了排序排了输入数组,然后用类似遍历地图的方式一个个填了进去。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll const INF = 1e9 + 7;
ll n, m, T;
int cnt = 0;
struct node {
node *Parent;
node *L;
node *R;
int vl, vr;
char c;
};
void OuF(node *point)
{
// cout << "Do" << endl;
if(point->L == NULL && point->R == NULL)
{
// cout << point->c << " is a leave" << endl;
cnt ++;
}
cout << point->c;
if(point->L != NULL)
{
OuF(point->L);
}
if(point->R != NULL)
{
OuF(point->R);
}
}
void OuM(node *point)
{
if(point->L != NULL)
{
OuM(point->L);
}
cout << point->c;
if(point->R != NULL)
{
OuM(point->R);
}
}
void OuA(node *point)
{
if(point->L != NULL)
{
OuA(point->L);
}
if(point->R != NULL)
{
OuA(point->R);
}
cout << point->c;
}
int main()
{
string s;
cin >> s;
if(s == "#")
{
cout << 0;
return 0;
}
int len = s.size();
int level = 1;
// cout << len << endl;
while(pow(2, level) - 1 < len)
{
level ++;
}
// cout << level;
char a = s[0];
node *TreeNode = new node;
TreeNode->Parent = NULL;
TreeNode->L = NULL;
TreeNode->R = NULL;
TreeNode->c = a;
TreeNode->vl = 0;
TreeNode->vr = 0;
// cout << a;
node *point = TreeNode;
for(int i = 1;i < len;i ++)
{
a = s[i];
if(point->L == NULL && a != '#' && point->vl == 0)
{
// cout << "GoL";
node *NewNode = new node;
node *thisnode = point;
// cout << "OK\n";
point->L = NewNode;
point->L->Parent = thisnode;
// cout << "OK\n";
NewNode->L = NULL;
NewNode->R = NULL;
NewNode->vl = 0;
NewNode->vr = 0;
NewNode->c = a;
point->vl = 1;
point = point->L;
}
else if(point->R == NULL && a != '#' && point->vr == 0)
{
// cout << "GoR";
node *NewNode = new node;
point->R = NewNode;
point->R->Parent = point;
// cout << "OK\n";
NewNode->L = NULL;
NewNode->R = NULL;
NewNode->vl = 0;
NewNode->vr = 0;
NewNode->c = a;
point->vr = 1;
point = point->R;
}
else if(point->L == NULL && a == '#' && point->vl == 0)
{
point->vl = 1;
}
else if(point->R == NULL && a == '#' && point->vr == 0)
{
point->vr = 1;
}
while(point->vl == 1 && point->vr == 1)
{
// cout << "Ex";
if(point == TreeNode) break;
point = point->Parent;
}
// cout << "Put " << a << " Successfully" << endl;
}
// cout << "OK" << endl;
point = TreeNode;
OuF(point);
cout << endl;
OuM(point);
cout << endl;
OuA(point);
cout << endl << cnt;
return 0;
}
采用了比较复杂的方式判断+建树... ..
主要复杂的地方在建树和输入判断。
先序、中序、后序遍历比较好写。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned short us;
int main()
{
ios::sync_with_stdio(false);
int m, n;
cin >> n >> m;
us mp[n + 1][m + 1];
us vis[n + 1][m + 1];
int k;
cin >> k;
for(int i = 0;i < n + 1;i ++)
for(int j = 0;j < m + 1;j ++)
{
mp[i][j] = 0;
vis[i][j] = 0;
}
for(int i = 0;i < k;i ++)
{
int x, y;
cin >> x >> y;
mp[x - 1][y - 1] = 1;
}
int maxlen = 0;
for(int i = 0;i < n;i ++)
{
for(int j = 0;j < m;j ++)
{
if(mp[i][j] && !vis[i][j])
{
vis[i][j] = 1;
// cout << "Now main pos is " << i + 1 << ", " << j + 1 << endl;
for(int ii = 0;ii < n;ii ++)
{
for(int jj = 0;jj < m;jj ++)
{
if((i == ii && j == jj ) || !mp[ii][jj]) continue;
// cout << "locate " << ii + 1 << ", " << jj + 1 << endl;
us uflag = 1, dflag = 1;
int dx = abs(i - ii);
int dy = abs(j - jj);
int cnt = 0;
int ustx = i, usty = j, dstx = i, dsty = j;
while(1)
{
if(ustx >= n || usty >= m)
{
// cnt ++;
break;
}
else if(!mp[ustx][usty])
{
uflag = 0;
break;
}
// cout << "To " << ustx + 1 << ", " << usty + 1<< endl;
cnt ++;
ustx += dx;
usty += dy;
}
if(!uflag) continue;
while(1)
{
if(dstx < 0 || dsty < 0)
{
// cnt ++;
break;
}
else if(!mp[dstx][dsty])
{
dflag = 0;
break;
}
// cout << "To " << dstx + 1 << ", " << dsty + 1 << endl;
cnt ++;
dstx -= dx;
dsty -= dy;
}
if(!dflag) continue;
// cout << "Go from " << i + 1 << ", " << j + 1 << " to " << ii + 1 << ", " << jj + 1 << " success" << endl;
// cout << "cnt = " << cnt - 1 << endl;
maxlen = max(maxlen, cnt - 1);
}
}
}
}
}
cout << maxlen;
return 0;
}
原来这道题真可以遍历暴力解,只能说这题数据很水。
思路就是:暴力遍历整个地图得到第一个子,然后再遍历整个地图得到第二个子,然后再根据两个子之间的初始位置进行一条直线的两边走,两边都走得出去就更新最多的子数,否则不更新,遍历下一个。
最后输出的就是最多的子数。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll const INF = 1e9 + 7;
ll n, m, T;
double RubbishCalculateWay()
{
string a;
cin >> a;
switch (a[0])
{
case '+':
return RubbishCalculateWay() + RubbishCalculateWay();
break;
case '-':
return RubbishCalculateWay() - RubbishCalculateWay();
break;
case '*':
return RubbishCalculateWay() * RubbishCalculateWay();
break;
case '/':
return RubbishCalculateWay() / RubbishCalculateWay();
break;
default:
return atof(a.c_str());
break;
}
}
int main()
{
cout << fixed << setprecision(6) << RubbishCalculateWay();
return 0;
}
这道题原本根本没想到递归,被别人一点就通了
#include <bits/stdc++.h>
using namespace std;
typedef unsigned int ui;
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned short us;
typedef double db;
const ll INF = 1e9 + 7;
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
ui T, M, N;
int main()
{
ios::sync_with_stdio(false);
cin >> T;
for(ui t = 0;t < T;t ++)
{
cin >> N >> M;
us mp[N][M];
for(ui i = 0;i < N;i ++)
for(ui j = 0;j < M;j ++)
{
mp[i][j] = 0;
}
queue<pair<int, int>> que;
queue<int> stepsque;
int n;
cin >> n;
for(int i = 0;i < n;i ++)
{
int a, b;
cin >> a >> b;
mp[a][b] = 1;
}
int stx, sty, edx, edy;
cin >> stx >> sty >> edx >> edy;
pair<int, int> stpos(stx, sty);
que.push(stpos);
stepsque.push(0);
int havefound = 0;
while(!que.empty())
{
int x = que.front().first;
int y = que.front().second;
int step = stepsque.front();
mp[x][y] = 2;
if(x == edx && y == edy)
{
cout << step << endl;
havefound = 1;
break;
}
for(int i = 0;i < 4;i ++)
{
int nx = x + dx[i];
int ny = y + dy[i];
if(nx >= 0 && nx < N && ny >= 0 && ny < M && mp[nx][ny] != 1 && mp[nx][ny] != 2)
{
pair<int, int> nextpos(nx, ny);
que.push(nextpos);
stepsque.push(step + 1);
}
}
que.pop();
stepsque.pop();
}
if(!havefound) cout << "Not arrive" << endl;
}
return 0;
}
感觉是很经典的地图搜索题目,这里使用bfs,用两个队列分别记录下一个位置和到下一个位置时的步数。
#include <bits/stdc++.h>
using namespace std;
typedef unsigned int ui;
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned short us;
typedef double db;
const ll INF = 1e9 + 7;
ui T, M, N;
int main()
{
ios::sync_with_stdio(false);
cin >> N;
for(ui i = 0;i < N;i ++)
{
string a, b;
cin >> a >> b;
a = a + a;
if(a.find(b) < a.size())
{
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
}
return 0;
}
是个环嘛,那我把它的头尾接起来(a = a + a),再用一下find函数,如果找到了就输出Yes,否则输出No。
感觉这周干的事挺多的写出来又感觉没那么多,是真的挺忙的。
最近也要开始学JAVA了,为后来做项目准备。
环境还没有配置好,不过JDK应该是装好了。
接下来这周感觉在比赛打完之后可以把重心放一点在JAVA上了(项目感觉挺复杂的)