#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;
}
共 3 条回复
更新记录 - 7/20 10:55 更新 E 题
年轻人非常可以
更新记录-7/19 9:42 更新D题