2022 杭电第四场

2022 杭电第四场

题意:

一个边长为n的正三角形由n2n^{2}个边长为1的小三角形组成,小三角形的三个顶点都填入0,1,2。其中大三角形的左边不能为0,右边不能为1,底边不能为2。另外小三角形三个顶点填的数之和不能为三的倍数。问能不能填的符合要求。

思路:

签到题,看着大家过的都快,忙猜一手输出全为No。

官方证明:对于一个合法的解,应当满足不存在同时包含0,1,2的三角形,下面我们证明这样的三角形一定存在。

左下角必然是1,右下角必然是0,底边不能含有2,则底边上必然有奇数条1-0的边,这些边都属于一个小三角形。考虑其他的0-1边,由于不在两个斜边上,其他的0-1边必然属于两个三角形。因此“每个三角形内0-1边的数量”的和必然为奇数。

但是,假设不存在0-1-2的三角形,则所有三角形都必然包含0条或2条的0-1边,产生了矛盾。

因此一定存在0-1-2的三角形。

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

inline void solve(){
    int n;
    cin>>n;
    cout<<"No"<<endl;
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	int t;
	cin>>t;
	while(t--){
		solve();
	}
	return 0;
}

1006 BIT Subway

题意:

累加购买车票分区间优惠不同,小于100无优惠,大于等于100小于200打八折,大于200打五折。Dlee认为一张票可以分段购买,输出Dlee认为的票价和实际的票价。

思路:

分段函数,按题意模拟即可

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=100005;
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
    	int n;
		double a,x=0,y=0;
		scanf("%d",&n);
		for(int i=0;i<n;i++){
			scanf("%lf",&a);
			if(x<100){
				if(x+a<100)
					x+=a;
				else if(100+0.8*(a-100+x)<200)
					x+=(100-x)+0.8*(a-100+x);
				else
					x+=100-x+100+(a-225+x)*0.5;
				
			}else if(x<200){
				if(x+0.8*a<200){
					x+=0.8*a;
				}else{
					x+=(200-x)+0.5*(a-(200-x)/0.8);
				}
			}else{
				x+=0.5*a;
			}
			if(y<100) y+=a;
    		else if(y>=100&&y<200) y+=a*0.8;
    		else y+=a*0.5;
		}
		printf("%.3lf %.3lf\n",x,y);
	}
	return 0;
} 
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务