Codeforces Round 937 (Div. 4) A-E

A题:Stair, Peak, or Neither?


AC代码:
cpp 复制代码
#include<iostream>
#include<cstring>

using namespace std;

int main()
{
	int t;
	cin >> t;
	while(t--)
	{
		int a,b,c;
		cin >> a >> b >> c;
		if(a < b && b < c)
		{
			puts("STAIR");	
		}
		else if(a < b && b > c)
		{
			puts("PEAK"); 
		}
		else
		{
			puts("NONE");	
		}	
	}
	return 0;
} 

B题:Upscaling


AC代码:
cpp 复制代码
#include<iostream>

using namespace std;

int main()
{
	int t;
	cin >> t;
	while(t--)
	{
		int n;
		cin >> n;
		if(n == 1)
		{
			printf("##\n##\n");
		}
		else
		{
			for(int i=1;i<=n;i++)
			{
				if(i%2!=0)
				{
					for(int j=1;j<=2;j++)
					{
						int a=0,b=0,w=0;
						for(int k=1;k<=2*n;k++)
						{
							if(a == 2) a = 0,w = 1;
							if(b == 2) b = 0,w = 0;
							if(a!=2&&!w)
							{
								printf("#");
								a++;
							}
							else if(b!=2&&w)
							{
								printf(".");
								b++; 
							}
						}
						puts("");
					}
				}
				else
				{
					for(int j=1;j<=2;j++)
					{
						int a=0,b=0,w=0;
						for(int k=1;k<=2*n;k++)
						{
							if(a == 2) a = 0,w = 1;
							if(b == 2) b = 0,w = 0;
							if(a!=2&&!w)
							{
								printf(".");
								a++;
							}
							else if(b!=2&&w)
							{
								printf("#");
								b++; 
							}
						}
						puts("");
					}
				}
			}
		}
	}
	return 0;		
} 

此题找规律即可


C题: Clock Conversion


AC代码:
cpp 复制代码
#include<iostream>
#include<map>
#include<cstring>

using namespace std;

int main()
{
	map<int,int> mp{{13,1},{14,2},{15,3},{16,4},{17,5},{18,6},{19,7},{20,8},{21,9},{22,10},{23,11},{0,12}};
	int t;
	cin >> t;
	while(t--)
	{
		string str;
		cin >> str;
		int hh = stoi(str.substr(0,2));
		int mm = stoi(str.substr(3,5));
		//cout << hh << ' ' << mm << endl;
		if(hh <= 12)
		{
			if(hh == 12) {
				printf("%02d:%02d PM\n",hh,mm);
				continue;
			}
			if(hh == 0) hh = mp[hh];
			printf("%02d:%02d AM\n",hh,mm);
		}
		else
		{
			hh = mp[hh];
			printf("%02d:%02d PM\n",hh,mm);
		} 
	}
	return 0;
}

此题直接暴力打表即可


D题: D. Product of Binary Decimals


AC代码:
cpp 复制代码
#include<iostream>

using namespace std;

//打表 
int num[31] = {10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111, 10000,
10001, 10010, 10011, 10100, 10101, 10110, 10111, 11000, 11001, 11010, 
11011, 11100, 11101, 11110, 11111, 100000};

bool check(int n)
{
	int c = 0;
	while(n)
	{
		c = n % 10;
		if(c != 0 && c != 1) return false;
		n = n / 10;
	}
	return true;
}

int main()
{
	int t;
	cin >> t;
	while(t--)
	{
		int n;
		cin >> n;
		int cop = n;
		if(n==1) 
		{
			puts("YES");
			continue;
		}
		int i;
		for(i=0;i<30;i++)
		{
			while(cop%num[i] == 0)
			{
				cop = cop / num[i];
			}
			if(!check(cop)) cop = n;
			else break;
		}
		if(i<30) puts("YES");
		else puts("NO");
	}
	return 0;
} 

此题同样打表即可


E题: Nearly Shortest Repeating Substring


思路

此题是一道字符串的+约数的题,时间复杂度为O(logN) * O(N),因为此题说s由x个k组成,S串中最多有一个字符不同,所以k肯定是S串长度的约数,所以只需要找S的约束串长度进行一 一 枚举比较即可


AC代码:
cpp 复制代码
#include<iostream>
#include<cstring>

using namespace std;

int n,ans;
string str;

bool check(int len)
{
	string s1,s2;
	//求出截取的字符串 
	for(int i=0;i<len;i++)
	{
		s1 += str[i];
	}
	//如果长度够用,往后再挪动len位 
	if(len < str.size())
	{
		for(int i=len;i<len*2;i++)
		{
			s2 += str[i]; 
		}
	}
	int cnt1=0;
	int cnt2=0;
	for(int i=0;i<str.size();i++)
	{
		int now = i % len;//周期为len所以直接%就好
		if(s1[now] != str[i])
		{
			cnt1++;
		}
		if(cnt1 > 1) break;
	}
	if(cnt1 <= 1) return true;
	for(int i=0;i<str.size();i++)
	{
		int now = i % len;//周期为len所以直接%就好 
		if(s2[now] != str[i])
		{
			cnt2++;	
		}
		if(cnt2 > 1) break;
	}
	if(cnt2 <= 1) return true;
	return false; 
}

int main()
{
	int t;
	cin >> t;
	while(t--)
	{
		bool flag = false;
		int len=0,one=0,two=0;
		cin >> n >> str;
		ans = n;//如果没有满足就输出字符串本身长度 
		for(int i=1;i*i<=n;i++)
		{
			if(n % i == 0)
			{
				//两个约数 
				one = i;
				two = n / i;
			}
			//这里是最短的情况 
			if(check(one))
			{
				cout << one << endl;
				flag = true;
				break;
			}
			if(one != two)
			{
				//two不一定是最短的所以要拿ans先存一下 
				if(check(two))
				{
					ans = two;
				}
			}
		}
		if(!flag) cout << ans << endl;
	}
	return 0;	
}

相关推荐
帅逼码农18 分钟前
有限域、伽罗瓦域、扩域、素域、代数扩张、分裂域概念解释
算法·有限域·伽罗瓦域
Jayen H23 分钟前
【优选算法】盛最多水的容器
算法
机跃29 分钟前
递归算法常见问题(Java)
java·开发语言·算法
lijiachang03071838 分钟前
设计模式(一):单例模式
c++·笔记·学习·程序人生·单例模式·设计模式·大学生
<但凡.40 分钟前
题海拾贝:蓝桥杯 2020 省AB 乘法表
c++·算法·蓝桥杯
pzx_0011 小时前
【LeetCode】94.二叉树的中序遍历
算法·leetcode·职场和发展
DogDaoDao1 小时前
leetcode 面试经典 150 题:矩阵置零
数据结构·c++·leetcode·面试·矩阵·二维数组·矩阵置零
我曾经是个程序员1 小时前
使用C#生成一张1G大小的空白图片
java·算法·c#
芒果de香蕉皮1 小时前
mavlink移植到单片机stm32f103c8t6,实现接收和发送数据
stm32·单片机·嵌入式硬件·算法·无人机
徐子童2 小时前
二分查找算法专题
数据结构·算法