2021HAUT_新生周赛lcx专场
Posted lichenx_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021HAUT_新生周赛lcx专场相关的知识,希望对你有一定的参考价值。
题目异常友好。
有不懂的,直接留言。
目录
卷王之争
比较两个分数大小;
法一:直接通分时要注意数据范围。
#include <iostream>
int main()
{
long long a , b , x , y ;
scanf("%d%d%d%d",&a,&b,&x,&y) ;
a*= y ;
x*= b ;
if(a > x)
printf("H is juanwang!\\n") ;
else if(a < x)
printf("T is juanwang!\\n") ;
else
printf("We are juanwang!\\n") ;
return 0;
}
法二:除法计算注意,double不能直接判等号。
#include <iostream>
#include <algorithm>
#include <cmath>
#define double long double
const double eps = 1e-20 ;
int dcmp(double x,double y){
if(fabs(x - y ) < eps) return 0 ;
if(x < y) return -1;
return 1 ;
}
int main()
{
double a, b , x , y ;
scanf("%d%d%d%d" ,&a ,&b ,&x ,&y) ;
double s = a/b ;
double u = x/y ;
if(dcmp(s,u) > 0)
printf("H is juanwang!\\n") ;
else if(dcmp(s,u) < 0)
printf("T is juanwang!\\n") ;
else
printf("We are juanwang!\\n") ;
return 0 ;
}
纸牌游戏
算是一个简单博弈吧;
例有两种花色的纸牌:
新生第一次取走了第一种纸牌m张,则S学长取走另一种花色m张;
此后不管新生取走哪一种花色的纸牌,也不论取走多少张,S学长都会取走另一种花色的纸牌同样多张;
这样,最后一张纸牌一定是S学长取走的。
拓展到四种花色,也是同样道理。
这样的话,无论如何,结果都是S学长必胜。
#include <stdio.h>
int main()
{
int n ;
scanf("%d",&n) ;
printf("tql\\n") ;
return 0;
}
签到时间
这是一道简单的高中数学题;
已知:二项式展开式的系数,奇数项之和等于偶数项之和。
选偶数个人,是:
选奇数个人,是:
则结果为:
二项式展开式得偶数项多一个 ;
则最后结果为 ;
如果,想不起来这个定理的话,建议写几个试试,找规律。
#include <stdio.h>
int main()
{
int n ;
scanf("%d",&n) ;
printf("-1\\n") ;
return 0;
}
干饭时间
简单贪心;
每次只能去买两种东西,必须在第一种东西做好之前回来;
则,每次选取得两个数字不能相等;
最终结果等于每次选择的两个数字的最大值再加和;
为了最后的时间加和最小,则需要让每两个时间中最小的那个时间值,尽可能的大;
做法:先排序,每次选择两个不同的数,消耗的时间为较大的那个数值;
#include <iostream>
#include <cstdio>
int a[1010], b[1010];
void Sort(int a[], int n)
{
for (int i = n - 1; i > 0; i--)
for (int j = 0; j < i; j++)
if (a[j] > a[j + 1])
{
int t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
Sort(a , n);
int ans = 0;
for (int i = n - 1; i >= 0; i--)
{
if (b[i])
continue;
ans += a[i];
for (int j = i - 1; j >= 0; j--)
{
if (!b[j] && a[j] < a[i])
{
b[j] = 1;
break;
}
}
}
printf("%d\\n", ans);
return 0;
}
游戏时间
本场最签到题;
每次循环当没有达到目标的话,天数加加,分数增长值加加。
#include <iostream>
#include <cstdio>
int main()
{
int n , k ;
scanf("%d%d",&n,&k) ;
int ans = 0 ;
int day = 0 ;
while(ans < n)
ans += k , k++ , day ++ ;
printf("%d\\n" , day) ;
return 0 ;
}
周赛榜单
如果对每个t都过一遍1~n的话,时间复杂度达到了1e12,这样的话时间超限,所以这个题得要先处理一下。
SO,这个只要把前缀和处理一下,这个题就变成了签到题。
例:
原数组:
前缀和 为数组的前项和
前缀和:
前缀和算法能够快速的求出某段区间的和;
出题人说:前缀和更深度的学习看这里。
#include <stdio.h>
int a[1000010] ;
int main()
{
int n ;
scanf("%d" , &n) ;
a[0] = 0 ;
for(int i = 1 ;i <= n ; i++)
{
int x ;
scanf("%d" , &x) ;
a[i] = a[i-1]+x ;//a[i]表示前i个人的分数的和
}
int t ;
scanf("%d" , &t) ;
while(t--)
{
int x ;
scanf("%d" , &x) ;
printf("%d\\n" , a[x]) ;
}
return 0 ;
}
没有名字
简单分支;
依照题意可得,如下:
#include <iostream>
#include <cstdio>
int a[1000010] ;
int main()
{
int n;
scanf("%d" ,&n) ;
int ans = 0 , sum = 0 ;
while(n--)
{
int x , y ;
scanf("%d%d",&x,&y) ;
if(x > y)
{
if(x==40 && (y==10 || y==20))
sum += 5 ;
else
ans += (x-y) ;
}
else
{
if(y==40 && (x==10 || x==20))
ans += 5 ;
else
sum += (y-x) ;
}
}
printf("%d %d",ans ,sum) ;
return 0 ;
}
三角图形
简单模拟;
六根棍子拼出两个三角形。
法一:枚举,枚举每种可能拼成三角形的情况,判断即可;
#include <iostream>
#include <cstdio>
int is_right(int a , int b , int c)
{
if(c+b > a)
return 1 ;
return 0 ;
}
int main()
{
int a[10] ;
for(int i = 0 ; i < 6 ; i++)
scanf("%d", &a[i]) ;
int flag = 0 ;
for(int i = 0 ; i < 6 ; i++)
for(int j = i+1 ; j < 6 ; j++)
for(int k = j+1 ; k < 6 ; k++)
{
int b[5] ;
int c = 0 ;
for(int p = 0 ; p < 6 ; p++)
if(p != i && p != j && p != k)
b[c++] = a[p] ;
if(is_right(a[i] , a[j] , a[k])==1 && is_right(b[0] , b[1] , b[2])==1)
{
flag = 1 ;
break ;
}
}
if(flag == 0)
printf("No\\n") ;
else
printf("Yes\\n") ;
return 0 ;
}
法二:也是枚举
#include <iostream>
#include <cstdio>
int main()
{
int a[10] ;
for(int i = 0 ; i < 6 ; i++)
scanf("%d", &a[i]) ;
if(a[5] + a[4] > a[3] && a[2] + a[1] > a[0])
printf("Yes\\n") ;
else if(a[5] + a[3] > a[2] && a[4] + a[1] > a[0])
printf("Yes\\n") ;
else if(a[5] + a[2] > a[1] && a[4] + a[3] > a[0])
printf("Yes\\n") ;
else if(a[5] + a[1] > a[0] && a[4] + a[3] > a[2])
printf("Yes\\n") ;
else
printf("No\\n") ;
return 0 ;
}
题解简陋,有问题直接提;
以上是关于2021HAUT_新生周赛lcx专场的主要内容,如果未能解决你的问题,请参考以下文章