通师高专科技创新社周赛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;
}

总结

排序模板题

Guess you like

Origin blog.csdn.net/qq_34682765/article/details/121726130