通师高专科技创新社周赛Round 2

A.[COCI2016-2017#1] Tarifa

思路

  • 1.算出n+1个月共有多少流量,再减去前n个月用掉的,就是答案。

坑点

  • 1.无

代码

#include<bits/stdc++.h> 
using namespace std;
int main()
{
	int x, n;
	cin >> x >> n;
	x *= (n+1);
	for (int i = 1; i <= n; i ++ )
	{
		int xx; cin >> xx;
		x -= xx;
	}
	cout << x << endl;
	return 0;
}

总结

签到

B.総和

思路

  • 1.暴力枚举即可,注意判断边界。
  • 2.也可以用前缀和的思想来做。

坑点

  • 1.开long long

代码

暴力

#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
	int n, m, sum = 0;
	cin >> n >> m;
	int a[n + 10] = {0};
	for (int i = 1; i <= n; i ++ )
	{
		cin >> a[i];
	}
	for (int i = 1; i <= n - m + 1; i ++ )
	{
		for (int j = i; j <= i + m - 1; j ++ )
		{
			sum += a[j];
		}
	}
	cout << sum << endl;
	return 0;
}

前缀和

#include<bits/stdc++.h>//众所周知的万能头文件

using namespace std;

long long a[100010],num[100010]={0};
 //不要忘了初始化为0
  
long long n,k,sum=0;
  
//以上为定义(要long long否则会爆int)

//a[]表示输入的数列,num[i]表示a[i]的前缀和;
//n,k如题,sum为最后的答案

int main()
{
	cin>>n>>k;
	for(int  i=1;i<=n;i++)//读入数列
	{
		cin>>a[i];
		num[i]=num[i-1]+a[i];//计算a[i]的前缀和
	}//预处理完毕!
	for(int i=k;i<=n;i++)//这里i从k开始循环,a[i]代表区间的末尾,num[i]代表区间末尾的前缀和
	{
		sum+=num[i]-num[i-k];
	}
	cout<<sum<<endl;//可爱地输出答案
	return 0;
}

总结

签到题

C.Omkar and Waterslide

思路

坑点

  • 1.无

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
	int t; cin >> t;
	while (t -- )
	{
		int n; cin >> n;
		int a[n + 10] = {0};
		for (int i = 1; i <= n; i ++ )
		{
			cin >> a[i];
		}
		int ans = 0;
		for (int i = 2; i <= n; i ++ )
		{
			if (a[i] < a[i - 1])
			{
				ans += (a[i - 1] - a[i]);
			}
		}
		cout << ans << endl;
	}
	return 0;
}

总结

思维题

D. 缘分计算

思路

坑点

  • 1.要注意前导0的问题

代码

题解

总结

大模拟

E.奖学金

思路

坑点

  • 1.无

代码

#include<bits/stdc++.h>
using namespace std;
struct name{
	int flag;
	int a;
	int b;
	int c;
	int sum;
}num[350];

bool cmp(name a, name b)
{
	if (a.sum != b.sum)
	{
		return a.sum > b.sum;
	}
	if (a.sum == b.sum && a.a != b.a)
	{
		return a.a > b.a;
	}
	if(a.sum == b.sum && a.a == b.a)
	{
		return a.flag < b.flag;
	}
	
}

int main()
{
	int n; cin >> n;
	for (int i = 1; i <= n; i ++ )
	{
		cin >> num[i].a >> num[i].b >> num[i].c;
		num[i].flag = i;
		num[i].sum = num[i].a + num[i].b + num[i].c;
	}
	sort(num + 1, num + 1 + n, cmp);
	for (int i = 1; i <= 5; i ++ )
	{
		cout << num[i].flag << " " << num[i].sum << endl;
	} 
	return 0;
}

总结

排序模板题

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值