2018-2019 ACM-ICPC, Asia Jiaozuo Regional Contest(假期刷题计划)

A(水题)
题意:上面一堆废话,目标所有游客都可以根据每个人游览过的景点数量进行分类。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e4+10;
const int mod=998244353;
int a[N]; 
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		int num=0;
		for(int i=1;i<=4;i++){
			int x;
			cin>>x;
			if(x!=0)num++;
		}
		a[i]=num;
	}
	for(int i=1;i<=n;i++){
		if(a[i]==0){
			cout<<"Typically Otaku"<<endl;
		}
		else if(a[i]==1){
			cout<<"Eye-opener"<<endl;
		}
		else if(a[i]==2){
			cout<<"Young Traveller"<<endl;
		}
		else if(a[i]==3){
			cout<<"Excellent Traveller"<<endl;
		}
		else {
			cout<<"Contemporary Xu Xiake"<<endl;
		}
	}
	
}

D(几何题)
题意:求赛车与内边界相切情况下,赛道最短长度。画图之后会看到两种情况分类讨论即可(懒得插图)

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+10;
const int mod=998244353;
ll a[N]; 
int main(){
	int t;
	cin>>t;
	double pi=acos(-1);
	while(t--){
	double a,b,r,d;
	cin>>a>>b>>r>>d;
	double Tan = b/(a + r);
	double ans;
	//cout<<Tan<<" "<<tan(d*pi/180)<<endl;
	if(Tan<tan(d*pi/180)|| (Tan>0&&tan(d*pi / 180) < 0))
	ans=sqrt(pow(a+r,2)+pow(b,2))-r;
	else{//角度过小 
		double jiao=d*pi/180;
		ans=r*cos(jiao)+b*sin(jiao)+a*cos(jiao)-r;
	}
	printf("%.12lf\n",ans);
}
	
}

I
题意有n个点,选其中k个使其两两之间距离和最大。
思路:考虑距离最大,优先选择两侧的点,进行配对。每次选择分奇偶讨论,选择奇数点时,相当于加上当前所有的对的距离和。偶数时,形成了新的一对,当前所有对的距离和增加,总距离再加上所有对的距离和。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+10;
const int mod=998244353;
ll a[N]; 
int main(){
	int t;
	cin>>t;
	while(t--){
	int n;
	cin>>n;
	a[1]=0;
	for(int i=2;i<=n;i++){
		ll x;
		scanf("%lld",&x);
		a[i]=a[i-1]+x; 
	}
	ll ans=0,cur=0;
	int l=0,r=n+1;
	int flag=0;
	for(int i=1;i<=n;i++){
		if(i&1){
			l++;
			ans+=cur;
		}
		else{
			r--;
			cur+=a[r]-a[l];
			ans+=cur;
		}
		if(flag==1)cout<<" ";
		cout<<ans;
		flag=1;
	}
	printf("\n");
}
	
}
上一篇:acm寒假集训第一天感想1.20


下一篇:大一寒假acm训练-小题目总结