Codeforces Round #557 (Div. 2) [based on Forethought Future Cup - Final Round]

A. Zoning Restrictions Again

暴力  每次取區間最小值


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

const  ll N = 5e5+100;
ll n,h,m;
ll l,r,s;
ll b[N];
ll ans;
int main(){
	cin>>n>>h>>m;
	for(int i=1;i<=n;i++){
		b[i]=h;
	}
	for(int i=1;i<=m;i++){
		cin>>l>>r>>s;
		for(int j=l;j<=r;j++){
			b[j]=min(b[j],s);
		}
	}
    for(int i=1;i<=n;i++){
    	//cout<<b[i]<<endl;
    	ans+=b[i]*b[i];
	}
	cout<<ans<<endl;
	return 0;
}

B. Double Matrix

一個小矩陣,一個大矩陣,然後判斷

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

const  ll N =55;
int a[N][N],b[N][N],c[N][N],d[N][N];
int n,m;
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++) 
		 cin>>a[i][j];
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++) 
		 cin>>b[i][j];
	}
	int flag=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			c[i][j]=min(a[i][j],b[i][j]);
			d[i][j]=max(a[i][j],b[i][j]);
		}
	}
//	cout<<endl;
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=m;j++)
//		cout<<c[i][j]<<" ";
//		cout<<endl;
//	}
//	cout<<endl;
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=m;j++)
//		cout<<d[i][j]<<" ";
//		cout<<endl;
//	}
	
    if(n==1){
    	for(int i=1;i<m;i++){
    		if(c[1][i]>=c[1][i+1] || d[1][i]>=d[1][i+1]){
    			flag=1;break;
			}
		}
	}
	else if(m==1){
		for(int i=1;i<n;i++){
			if(c[i][1]>=c[i+1][1] || d[i][1]>=d[i+1][1]){
				flag=1;break;
			}
		}
	}
	else{
		for(int i=1;i<n;i++){
		for(int j=1;j<m;j++){
			if(c[i][j]>=c[i][j+1] || d[i][j]>=d[i][j+1] || c[i+1][j]<=c[i][j] || d[i+1][j]<=d[i][j]){
				   flag=1;break;	
				//else swap(a[i][j+1],b[i][j+1]);
			} 
		}
	 }
	 
	 for(int i=1;i<m;i++){
    		if(c[n][i]>=c[n][i+1] || d[n][i]>=d[n][i+1]){
    			flag=1;break;
			}
		}
		
	for(int i=1;i<n;i++){
			if(c[i][m]>=c[i+1][m] || d[i][m]>=d[i+1][m]){
				flag=1;break;
			}
		}
	}
	
	if(flag==1) cout<<"Impossible"<<endl;
	else cout<<"Possible"<<endl;
	return 0;
}

C. Hide and Seek

一共3*(n-2)+4種可能區間,減去出現過的即可

#include<bits/stdc++.h>
using namespace std;
int n,k;
set< pair<int,int> > s;
int main(){
	cin>>n>>k;
	int a;
	for(int i=1;i<=k;i++){
		cin>>a;
		s.insert({a,0});
		if(s.count({a-1,0})==1){
			s.insert({a-1,a});
		}
		if(s.count({a+1,0})==1){
			s.insert({a+1,a});
		}
	}
	int sum=3*(n-2)+4;
	if(n==1) sum=1;
	cout<<sum-s.size()<<endl;
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章