2021年团体程序设计天梯赛-总决赛

目录

L1-1 人与神

L1-2 两小时学完C语言

L1-3 强迫症

L1-4 降价提醒机器人

L1-5 大笨钟的心情

L1-6 吉老师的回归

L1-7 天梯赛的善良

L1-8 乘法口诀数列

L2-1 包装机

L2-2 病毒溯源

L2-3 清点代码库

L2-4 哲哲打游戏



L1-1 人与神

#include 
using namespace std ;
typedef long long ll ;
const int N = 5e2 + 24 , M = 1e9 + 24 ;

int main()
{
	cout << "To iterate is human, to recurse divine." << endl ; 
	return 0 ;
} 

L1-2 两小时学完C语言

#include 
using namespace std ;
typedef long long ll ;
const int N = 5e2 + 24 , M = 1e9 + 24 ;

int main()
{
//	cout << "To iterate is human, to recurse divine." << endl ; 
	int n , k , m ;
	cin >> n >> k >> m ;
	cout << n-k*m ;
	return 0 ;
} 

L1-3 强迫症

#include 
using namespace std ;
typedef long long ll ;
const int N = 5e2 + 24 , M = 1e9 + 24 ;

int main()
{
	int n , year , month ;
	cin >> n ;
	month = n % 100 ;
	year = n / 100 ;
	if(year < 22)  year += 2000 ;
	else if(year < 100)  year += 1900 ;
	printf("%d-%02d" , year , month) ;
	return 0 ;
} 

L1-4 降价提醒机器人

#include 
using namespace std ;
typedef long long ll ;
const int N = 5e2 + 24 , M = 1e9 + 24 ;

int main()
{
	int n ;
	double m , p ;
	cin >> n >> m ;
	while(n --)
	{
		cin >> p ;
		if(p < m)  printf("On Sale! %.1f\n" , p) ;
	}
	return 0 ;
} 

L1-5 大笨钟的心情

#include 
using namespace std ;
typedef long long ll ;
const int N = 5e2 + 24 , M = 1e9 + 24 ;
int a[36] ;
int main()
{
	int i , j , t ;
	for(i = 0 ; i < 24 ; i ++)  cin >> a[i] ;
	while(1)
	{
		cin >> t ;
		if(t <0 || t > 23)  break ;
		if(a[t] > 50)  printf("%d Yes\n" , a[t]) ;
		else  printf("%d No\n" , a[t]) ;
	}
	return 0 ;
} 

L1-6 吉老师的回归

#include 
using namespace std ;
typedef long long ll ;
const int N = 5e2 + 24 , M = 1e9 + 24 ;
int a[36] ;
int main()
{
	int n , m , cnt = 0 , i ;
	string s ;
	bool flag = true ;
	cin >> n >> m ;
	getchar() ;
	for(i = 1 ; i <= n ; i ++)
	{
		getline(cin , s) ;
		if((s.find("qiandao") != -1) || (s.find("easy") != -1))  continue ;
		cnt ++ ;
		if(cnt == m+1)
		{
			flag = false ;
			cout << s << endl ;
		}
	}
	if(flag)  cout << "Wo AK le" ;
	return 0 ;
} 

L1-7 天梯赛的善良

#include 
using namespace std ;
typedef long long ll ;
const int N = 1e6 + 24 , M = 1e9 + 24 ;
int a[N] ;
int main()
{
	int n , i , j , t , minn = N , maxx = -1 ;
	cin >> n ;
	for(i = 1 ; i <= n ; i ++)
	{
		cin >> t ;
		a[t] ++ ;
		minn = min(minn , t) ;
		maxx = max(maxx , t) ;
	}
	cout << minn << " " << a[minn] << endl ;
	cout << maxx << " " << a[maxx] ;
	return 0 ;
} 

L1-8 乘法口诀数列

#include 
using namespace std ;
typedef long long ll ;
const int N = 1e3 + 24 , M = 1e9 + 24 ;
int a[N] ;
int main()
{
	int n , i = 1 , j , cnt = 2 , t ;
	cin >> a[1] >> a[2] >> n ;
	while(cnt <= n)
	{
		t = a[i] * a[i+1] ;
		if(t > 9)  a[++cnt] = t/10 , a[++cnt] = t%10 ;
		else a[++cnt] = t ;
		i ++ ;
	}
	for(i = 1 ; i <= n ; i ++)
	{
		if(i > 1)  cout << " " ;
		cout << a[i] ;
	}
	return 0 ;
} 

L2-1 包装机

#include 
using namespace std ;
typedef long long ll ;
const int N = 1e2 + 24 , M = 1e3 + 24 ;
int a[N] ;
struct point{
	char s[M] ;
	int t  ; // 下一个待处理的位置 
	point()
	{
		t = 0 ;
	}
}p[N];
vector v ;  // 从筐里抓出物品的存放处 
stack s ;  // 框 
int main()
{
	int n , m , smax , i , j , id ;
	char c ;
	cin >> n >> m >> smax ;
	for(i = 1 ; i <= n ; i ++)
	{
		cin >> p[i].s ;
//		p[i].t = 0 ;
	} 
	while(1)
	{
		cin >> id ;
		if(id == -1)  break ;
		if(id == 0)  // 从框里面取东西 
		{
			if(!s.empty())  // 框不为空 
			{
				v.push_back(s.top()) ;
				s.pop() ;
			}
		}
		else if(id > 0)
		{
			if(p[id].t < m)  // 轨道id上不为空 
			{
				if(s.size() == smax)  //筐已经满了,强制取出来一个 
				{
					v.push_back(s.top()) ;
					s.pop() ;
				}
				c = p[id].s[p[id].t] ;
				p[id].t ++ ;
				s.push(c) ;
			}
		}
	}
	for(i = 0 ; i < v.size() ; i ++)
	{
		cout << v[i] ;
	}
	return 0 ;
} 

L2-2 病毒溯源

#include 
using namespace std ;
typedef long long ll ;
const int N = 1e4 + 24 , M = 1e3 + 24 ;
vector v[N] ;
int vis[N] , s[N] ; //确定第一个 

int dfs(int root)
{
	int i , j , res = 0 , d ;
	s[root] = -1 ;
	for(i = 0 ; i < v[root].size() ; i ++)
	{
		j = v[root][i] ;
		d = dfs(j) ;
		if(d > res)  res = d , s[root] = j ;
		else if(d == res)  s[root] = min(s[root] , j) ;
	}
	return res+1 ;
}
int main()
{
	int n , i , j , root , kk ;
	cin >> n ;
	for(i = 0 ; i < n ; i ++)
	{
		int k ;
		cin >> k ;
		while(k --)
		{
			cin >> kk ;
			v[i].push_back(kk) ;
			vis[kk] = 1 ;
		}
	}
	for(i = 0 ; i < n ; i ++)
	{
		if(vis[i] == 0) 
		{
			root = i ;
			break ;
		}
	}
//	memset(s , -1 , sizeof(s)) ; // 记录下一个 
	cout << dfs(root) << endl ;
	cout << root ;
	while(s[root] != -1)
	{
		cout << " " << s[root] ;
		root = s[root] ;
	}
	return 0 ;
}

L2-3 清点代码库

没怎么看懂题目

L2-4 哲哲打游戏

好好看题目,想复杂了我,害!

#include 
using namespace std ;
typedef long long ll ;
const int N = 1e5 + 24 , M = 1e3 + 24 ;
vector v[N] ;
int book[N] ; // 用于存档 
int main()
{
	int n , m , i , j , k , kk ;
	cin >> n >> m ;
	for(i = 0 ; i <= n ; i ++)
	{
		v[i].push_back(0) ;
	}
	for(i = 1 ; i <= n ; i ++)
	{
		cin >> k ;
		while(k --)
		{
			cin >> kk ;
			v[i].push_back(kk) ;
		}
	}
	int p = 1 ; // 剧情 
	while(m --)
	{
		cin >> k >> kk ;
		if(k == 0)
		{
			p = v[p][kk] ;
		}
		else if(k == 1)
		{
			book[kk] = p ;
			cout << p << endl ;
		}
		else if(k == 2)
		{
			p = book[kk] ;
		}
	}
	cout << p ;
	return 0 ;
}

L3我真的不会,目前不太会,希望未来能补上,加油!!

你可能感兴趣的:(天梯赛,c++,算法,数据结构,天梯,c语言)