栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

2021辽宁省大学生程序设计竞赛(C、D、E、F、G、L)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021辽宁省大学生程序设计竞赛(C、D、E、F、G、L)

C-传染病统计

题目描述

输入描述

输出描述

输入样例

3
2
3 6
3
1 3 5
5
1 2 5 6 7

输出描述

1 1
3 3
2 3

数据范围极小的普通签到题,通过距离是否大于 2 分为多个连通块(?),并统计每个连通块中的人数并更新答案即可。

参考代码

#include 
using namespace std;
 
int a[10],d[10];
int main(){
    int t,n;
    cin >> t;
    while(t--){
        cin>>n;
        cin>>a[0];
        
        for(int i=1;i>a[i];
            d[i-1]=a[i]-a[i-1];
        }
        
        int resMax=-1,resMin=8,cnt=0;
        for(int i=0;i 
D-阿强与网格 

题目描述

输入描述

输出描述

输入样例

3
5 6 2 5
4 7 5 6
7 8 6 5

输出样例

18
33
36

贪心,每进行一次对角线方向的走法其实等价于两次直线方向走法,比较两种方法的价格,同时需要特判网格的特殊形状。

本题卡快读(可恶),考虑由 scanf 读入。

参考代码

#include
using namespace std;
typedef long long ll;

signed main(){
	int t;scanf("%d",&t);
	ll n,m,x,y;ll ans;
	while(t--){
		scanf("%lld%lld%lld%lld",&n,&m,&x,&y);
		if(m>n)swap(n,m);
		
		if(m==1){
			ans=(n-1ll)*x;
		}else if(2ll*x<=y){
			ans=(n+m-2ll)*x;
		}else if(x<=y){
			ans=(n-m)*x+(m-1ll)*y;
		}else if((n-m)&1){
			ans=(n-2ll)*y+x;
		}else{
			ans=(n-1ll)*y;
		}
		printf("%lldn",ans);
	}
	return 0;
}
E-生活大爆炸

题目描述

输入描述

输出描述

输入样例

5 2 5

输出样例

10

数学组合问题,毕竟高中都学过手模一下就好了嘛 ,注意处理相同方案多次计算的问题。

#include 
typedef long long ll;
using namespace std; 
ll C[65][65];

int main(){
    int n,m,t;
    for(int i = 0;i <= 65;i++)
        for(int j = 0;j <= i;j++){
            if(!j)
                C[i][j] = 1;
            else
                C[i][j] = C[i - 1][j - 1] + C[i - 1][j];
        }
    cin >> n >> m >> t;
    ll ans = 0;
    for(int i = 4;i <= n;i++)
        for(int j = 1;j <=m;j++)
            if(i + j == t)
                ans += C[n][i] * C[m][j];
    cout << ans << endl;
 
    return 0;
}

F-Capslock

题目描述

输入描述

输出描述

输入样例1

cAPS

输出样例1

Caps

输入样例2

Lap

输出样例2

Lap

对各种情况模拟即可,注意 asc 码中大写字母在小写字母之前。

参考代码

#include 
using namespace std;

int main(){
    int flag=0;
    string s;
    cin>>s;
    for(int i=1;i'Z')
            flag=1;
    if(flag==0){
        if(s[0]>'Z')
            s[0]-='a'-'A';
        else s[0]+='a'-'A';
        for(int i=1;i 
G-字节类型 

题目描述

输入描述

输出描述

输入样例1

127

输出样例1

byte

输入样例2

123456789101112131415161718192021222324

输出样例2

BigInteger

由于都是正整数,因此比较大小即可。考虑用 __int128 进行转换,在 __int128 范围内且大于 long long 范围的则输出 BigInteger,否则逐级比较。

为了避免麻烦,长度大于 20 的直接输出即可。

参考代码

#include
using namespace std;
string a;
__int128 x=0;
int main()
{
	cin>>a;
	int len=a.size();
	if(len>=20){
		printf("BigIntegern");
		return 0;
	}
	for(int i=0;i9223372036854775807)printf("BigIntegern");
	else if(x>147483647)printf("longn");
	else if(x>32767)printf("intn");
	else if(x>127)printf("shortn");
	else printf("byten");
	return 0;
}
L-神奇的回答

题目描述

输入描述

输出描述

输入样例

4
19
14
4
122

输出样例

18
14
4
18

不会吧?这题都要讲吗?

人人都会的代码

#include 
using namespace std;

int main(){
    int n;
    cin>>n;
    while(n--){
        int x;
        cin>>x;
        if(x>=18)
            cout<<18<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/352546.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号