ABC310 ABCDE 题解- chenyining

chenyining 2023-07-18 10:11:08 2023-07-25 12:04:47 10

A题

题意:

数据范围:

思路:

便

时间复杂度:

#include<bits/stdc++.h>
#define int long long
using namespace std;
 
signed main(){
	int n,p,q,mi=1e9;
	cin>>n>>p>>q;
	for(int i=1;i<=n;i++){
		int x;
		cin>>x;
		mi=min(mi,x);
	} 
	cout<<min(q+mi,p);//我当时以为是有一张q元优惠券,所以写成了min(p-q+mi,p),这翻译有点捞T_T
	return 0;
} 

B题

题意:

数据范围:

思路:

时间复杂度:

#include<bits/stdc++.h>
using namespace std;
 
int f[110][110],l[110],p[110],cnt[110][100010];
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>p[i]>>l[i];
		for(int j=1;j<=l[i];j++)
			cin>>f[i][j],cnt[i][f[i][j]]=1;	
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(p[i]>=p[j]&&i!=j){
				int t=0;
				for(int k=1;k<=l[i];k++){
					if(!cnt[j][f[i][k]])
						t=1;
				}
				if(t)continue;
				if(l[j]>l[i]||p[i]>p[j]){
					cout<<"Yes";
					return 0;
				}
			}
		}
	}
	cout<<"No";
	return 0;
}

C题

题意:

数据范围:

思路:

时间复杂度:

#include<bits/stdc++.h>
using namespace std;
 
string s[200010];
map<string,int>mp;
int main(){
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>s[i];
		mp[s[i]]++;
	}
	int cnt=0;
	for(int i=0;i<n;i++){
		string p=s[i];	
	    reverse(p.begin(),p.end());//翻转函数
	    if(mp[s[i]]+mp[p]>0)cnt++,mp[s[i]]=0,mp[p]=0;
	} 
	cout<<cnt;
	return 0;
}

#include<bits/stdc++.h>
using namespace std;
 
string s[200010];
set<string>st;
int main(){
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>s[i];
		st.insert(s[i]);
	}
	int cnt=0;
	for(int i=0;i<n;i++){
		string p=s[i];	
	    reverse(p.begin(),p.end());//翻转函数
	    auto it1=st.find(s[i]),it2=st.find(p);
	    if(it1!=st.end())
	    	cnt++,st.erase(s[i]);
	    if(it2!=st.end())
			st.erase(p);		
	} 
	cout<<cnt;
	return 0;
}

D题

题意:

数据范围:

思路:

时间复杂度:

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

int n,t,m;
int f[11][11];//i,j是否无法同队
long long ans;
int g[11][11],l[11];//目前的队伍情况
void dfs(int dep,int d){
	if(dep==n+1&&d!=t)return;
	if(dep==n+1&&d==t){		
		ans++;
		return;
	}
	for(int i=1;i<=d+1;i++){//避免空队
		int s=0;
		for(int j=1;j<=l[i];j++){
			if(f[g[i][j]][dep]){
				s=1;
				break;
			}
		}
		if(!s){
			g[i][++l[i]]=dep;
			if(l[i]==1)
				dfs(dep+1,d+1);
			else
				dfs(dep+1,d);
			l[i]--;
		}			
	}	
}
signed main(){ 
  	cin>>n>>t>>m;
  	for(int i=1;i<=m;i++){
	  	int x,y;
	  	cin>>x>>y;
	  	f[x][y]=f[y][x]=1;//x,y都要记录
	}
	dfs(1,0);
	cout<<ans;
  	return 0;
}

E题

题意:

数据范围:

思路:

时间复杂度:

#include<bits/stdc++.h>
#define int long long
using namespace std;
 
char a[1000010];
int f[1000010];
signed main(){
	int n;
	cin>>n>>a+1;
	int ans=0;
	for(int i=1;i<=n;i++){
		if(a[i]=='0')
			f[i]+=i-1;
		else
			f[i]+=(i-1-f[i-1]);
		f[i]+=(a[i]-'0');
		ans+=f[i];
	}
	cout<<ans;
	return 0;
} 
{{ vote && vote.total.up }}

共 3 条回复

chenyining

更新记录 - 7/20 10:55 更新 E 题

cookiebus

年轻人非常可以

chenyining

更新记录-7/19 9:42 更新D题