看不懂DP......
A. Stair, Peak, or Neither?
很简单的大小判断
#include <bits/stdc++.h>
using namespace std;
int t;
int a,b,c;
int main()
{
cin>>t;
while(t--){
cin>>a>>b>>c;
if(a>=b) cout<<"NONE"<<endl;
else{
if(c==b) cout<<"NONE"<<endl;
else if(c>b) cout<<"STAIR"<<endl;
else cout<<"PEAK"<<endl;
}
}
return 0;
}
B. Upscaling
简单的输出问题
#include <bits/stdc++.h>
using namespace std;
int t;
int n;
int flag;
int main()
{
cin>>t;
while(t--){
cin>>n;
flag=0;
for(int i=1;i<=2*n;i++){
if(flag<2){
for(int i=1;i<=n;i++){
if(i%2==1) cout<<"##";
else cout<<"..";
}cout<<endl;flag++;
}
else{
for(int i=1;i<=n;i++){
if(i%2==1) cout<<"..";
else cout<<"##";
}cout<<endl;flag++;
if(flag==4) flag=0;
}
}
}
return 0;
}
C. Clock Conversion
对于十二点和0点要特判
#include <bits/stdc++.h>
using namespace std;
int t;
int n;
int h,m;
int main()
{
cin>>t;
while(t--){
scanf("%d:%d",&h,&m);
if(h>0&&h!=12){
printf("%02d:%02d",h%12,m);
if(h>12) printf(" PM\n");
else printf(" AM\n");
}
else if(h==12){
printf("%02d:%02d",h,m);
printf(" PM\n");
}
else{
printf("12:%02d",m);
printf(" AM\n");
}
}
return 0;
}
D. Product of Binary Decimals
首先找出1e5范围内的所有二进制十进制数塞进vector容器里,然后对输入的每个数进行递归找这个数的因数,如果最后可以到1,即该数可以表示为一些二进制十进制数的乘积
#include <bits/stdc++.h>
using namespace std;
vector<int> vv;
int t;
bool ok(int x){
if(x==1) return true;
bool ans=false;
for(int i:vv){
if(x%i==0){
ans|=ok(x/i);
}
}
return ans;
}
void solve(){
int n;
cin>>n;
cout<<(ok(n)?"YES\n":"NO\n");
}
int main()
{
for(int i=2;i<=1e5;i++){
int m=i;
int flag=0;
while(m>0){
if(m%10>1){
flag=1;break;
}
m/=10;
}
if(!flag) vv.push_back(i);
}
cin>>t;
while(t--){
solve();
}
return 0;
}
E. Nearly Shortest Repeating Substring
最多只能有一个不一样的字符,还有这个可以循环的最小字符串可能出现在最前面,也可能出现在最后面,所以循环要进行两次
#include <bits/stdc++.h>
using namespace std;
vector<int> vv;
int t;
int ok(string x,int n){
string s=x;
for(int i=1;i<=n;i++){
if(n%i==0){
int c0=2;
for(int j=0;j<i;j++){
for(int k=j+i;k<n;k+=i){
if(s[j]!=s[k]) c0--;
}
}
if(c0>0) return i;
c0=2;
for(int j=n-i;j<n;j++){
for(int k=j-i;k>=0;k-=i){
if(s[j]!=s[k]) c0--;
}
}
if(c0>0) return i;
}
}
}
void solve(){
int n;cin>>n;
string s;cin>>s;
cout<<ok(s,n)<<endl;
}
int main()
{
cin>>t;
while(t--){
solve();
}
return 0;
}
F. 0, 1, 2, Tree!
为了让深度最短,先排a树再排b数,然后还有要满足a=c+1(这个结论可以画几棵树找规律),否则就直接输出-1,
#include <bits/stdc++.h>
using namespace std;
int t;
int a,b,c;
int main()
{
cin>>t;
while(t--){
cin>>a>>b>>c;
if(a+1!=c) cout<<-1<<endl;
else if(a+b+c==1) cout<<0<<endl;
else{
int now=1,next=0,res=1;
for(int i=1;i<=a+b;i++){
if(!now){
swap(now,next);
res++;
}
now--;
next++;
if(i<=a) next++;
}
cout<<res<<endl;
}
}
return 0;
}