A. Stair, Peak, or Neither?
根据题意来就可以了
#include <bits/stdc++.h>
using namespace std;
void solve(){
int a,b,c;
cin>>a>>b>>c;
if(a<b and b<c){
cout<<"STAIR"<<endl;
}else if(a<b and b>c){
cout<<"PEAK"<<endl;
}else cout<<"NONE"<<endl;
}
int main(){
ios::sync_with_stdio(false),cin.tie(nullptr);
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}
B. Upscaling
根据题目那个图片交替输出
一开始是##,然后是..,两行两行出,所以第一行输出了之后,复制再输出一次就可以了。
#include <bits/stdc++.h>
using namespace std;
void solve(){
int n;
cin>>n;
string s="";
for(int j=1;j<=n;++j){//第j列
for(int i=1;i<=n;++i){//第i行
if((i+j)%2==0){//#
cout<<"##";
s+="##";
}else{//.
cout<<"..";
s+="..";
}
}
cout<<endl;
cout<<s<<endl;
s="";
}
}
int main(){
ios::sync_with_stdio(false),cin.tie(nullptr);
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}
C. Clock Conversion
24小时制变成12小时制,题目样例给了12:00是PM,所以<12的时候是AM,其他时候是PM,下午的时候减12就可以了。
#include <bits/stdc++.h>
using namespace std;
void solve(){
string s;
cin>>s;
string s1=s.substr(0,2),s2=s.substr(3,2);
int a1=(s1[0]-'0')*10+(s1[1]-'0');
int a2=(s2[0]-'0')*10+(s2[1]-'0');
if(a1<12){
if(a1==0){
cout<<12<<":"<<s2<<" AM"<<endl;
}else{
if(a1<10)cout<<0;
cout<<a1<<":"<<s2<<" AM"<<endl;
}
}else{
a1-=12;
if(a1==0)a1=12;
if(a1<10)cout<<0;
cout<<a1<<":"<<s2<<" PM"<<endl;
}
}
int main(){
ios::sync_with_stdio(false),cin.tie(nullptr);
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}
D. Product of Binary Decimals
定义 x 为长的和二进制一样的 十进制数,如:100,101,110(看起来是二进制,但是是十进制)。
数 n 是否形如 x,
如果不形如 x 是否能通过 x 累乘,x1*x2*x3...=n(x可以相同)
那么先判断是否形如 x,不是则因数分解(先把所有在范围内的x用dfs跑出来)。
#include <bits/stdc++.h>
using namespace std;
set<int>s;
void dfs(int now){
if(now>1e5)return;
s.insert(now);
dfs(now*10);
dfs(now*10+1);
}
void solve(){
int n;
cin>>n;
int tmp=n;
while(tmp){
int b=tmp%10;
tmp/=10;
if(b>=2){//other check
for(auto num:s){
while(n%num==0){
n/=num;
}
}
if(n==1){
cout<<"YES"<<endl;
return;
}else{
cout<<"NO"<<endl;
return;
}
}
}
cout<<"YES"<<endl;
//already be a binary dicimal notation
}
int main(){
ios::sync_with_stdio(false),cin.tie(nullptr);
dfs(1);
s.erase(1);
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}
E. Nearly Shortest Repeating Substring
字符串S,是否能由字符串C反复出现k(k任意取)次得到(可以有一个不同)。重复出来的字符串长度必须和字符串一样,
那显然要枚举字符串S已经有的子串,因为最后长度要一样,所以直接枚举长度为字符串S长度的因子,复杂度趋近n*sqrt(n)
// LUOGU_RID: 155415923
#include <bits/stdc++.h>
using namespace std;
void solve(){
int n;
string s;
cin>>n>>s;
for(int i=1;i<=n;++i){//c的长度
if(n%i==0){//刚好
map<string,int>f;
for(int j=0;j<n;j+=i){
string tmp=s.substr(j,i);
f[tmp]++;
}
if(f.size()==1){
cout<<i<<endl;
return;
}else if(f.size()==2){//少的那个改到多的那个去
string str[2];
int cnt=0,minn=INT_MAX;
for(auto [stri,cnti]:f){
str[cnt++]=stri;
minn=min(minn,cnti);
}
int dif=0;
for(int j=0;j<str[0].length();++j){
if(str[0][j]!=str[1][j]){
dif++;
}
}
if(minn*dif<=1){
cout<<i<<endl;
return;
}
}
}
}
}
int main(){
ios::sync_with_stdio(false),cin.tie(nullptr);
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}