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;	
}

相关推荐
柠檬少少开发8 分钟前
图像拼接算法及实现(一)
人工智能·算法·计算机视觉
jnrjian18 分钟前
USE_CONCAT in list OR 以及 filter Nest LOOP
数据结构·list
阿华的代码王国24 分钟前
【JavaEE】多线程编程引入——认识Thread类
java·开发语言·数据结构·mysql·java-ee
weixin_486681141 小时前
C++系列-STL容器中统计算法count, count_if
开发语言·c++·算法
基德爆肝c语言1 小时前
C++入门
开发语言·c++
怀九日1 小时前
C++(学习)2024.9.18
开发语言·c++·学习·面向对象·引用·
一道秘制的小菜1 小时前
C++第七节课 运算符重载
服务器·开发语言·c++·学习·算法
代码小狗Codog2 小时前
C++独立开发开源大数计算库 CBigNum
数据结构·c++
咕噜咕嘟嘟嘟2 小时前
343. 整数拆分
数据结构·算法
WenGyyyL3 小时前
力扣最热一百题——二叉树的直径
java·c++·算法·二叉树·深度优先