B
直接map就行了
#include<bits/stdc++.h>
using namespace std;
map<string ,int>mp,mpp;
int main() {
int n,m;
//scanf("%d%d",&n,&m);
cin>>n>>m;
for(int i=1;i<=n;i++)
{
string s;
cin>>s;
mp[s]++;
}
int ans=0;
map<string ,int >::iterator iter;
for(iter=mp.begin();iter!=mp.end();iter++)
{
string ss=iter->first;
map<char,int>mp1;
string s1="";
for(int i=0;i<ss.size();i++)
{
if(mp1[ss[i]]==0)
s1+=ss[i],mp1[ss[i]]++;
else
continue;
}
if(mpp[s1]==0)
{
ans++;
mpp[s1]++;
}
}
cout<<ans<<endl;
}
C
首先将ai 按照从大到小的顺序排列好这样就可以每次放入的就是 数组a的最小值 然后再定义一个优先队列 每次弹出的是最小值 然后循环跑一边就可以了
#include<bits/stdc++.h>
using namespace std;
struct node{
int a,b;
}r[100010];
int n,k;
bool cmp(node a,node b){
return a.a > b.a;
}
struct cmp1{
bool operator () (int a,int b)
{
return a>b;
}
};
int main()
{
cin>>n>>k;
priority_queue<int,vector<int>,cmp1>q;
for(int i=1;i<=n;i++)
{
cin>>r[i].a>>r[i].b;
}
sort(r+1,r+1+n,cmp);
int ans=0;
for(int i=1;i<=n;i++)
{
q.push(r[i].b);
if(q.size()==k)
{
ans=max(ans,q.top()+r[i].a);
q.pop();
}
}
cout<<ans<<endl;
return 0;
}
E
签到题。。 我写的好像比较麻烦
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int a[1010];
int n;
cin>>n;
int maxx=1,ans=1;
int flag1=1,flag2=1;
cin>>a[1];
for(int i=2;i<=n;i++)
{
cin>>a[i];
if(a[i]>=a[i-1])
{
ans++;
flag2=i;
}
else
{
if(ans>maxx)
{
flag1=flag2;
maxx=ans;
}
ans=1;
}
}
if(ans>maxx)
{
flag1=flag2;
maxx=ans;
}
cout<<flag1-maxx+1<<" "<<flag1<<endl;
//cout<<maxx<<endl;
}
return 0;
}
F
跑一遍Foldy就可以了
#include<bits/stdc++.h>
using namespace std;
int mp[350][350];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
mp[i][j]=0;
}
for(int i=1;i<=m;i++)
{
int x,y;
cin>>x>>y;
mp[x][y]=1;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int k=1;k<=n;k++)
{
if(mp[j][i]==1&&mp[i][k]==1)
{
mp[j][k]=1;
}
}
}
}
int ans=0;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(mp[j][i]==1&&mp[i][j]==1)
{
ans++;
}
}
}
cout<<ans<<endl;
return 0;
}
H
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
string s;
cin>>s;
s=" "+s;
string ss="";
for(int i=1;i<s.size();i++)
{
if(i%2)
{
ss+=s[i];
}
}
cout<<ss<<endl;
}
}
I
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int b[110];
memset(b,0,sizeof(b));
int a[110];
int n;
cin>>n;
for(int i=2;i<n+2;i++)
{
cin>>a[i];
b[i]=a[i];
}
int ans=0;
for(int i=2;i<n+2;i++)
{
b[i]=max(b[i-1],b[i-2]+a[i]);
}
cout<<b[n+1]<<endl;
}
}
J
简单搜索
#include<bits/stdc++.h>
using namespace std;
int mp[100][100];
int mpp[100][100];
int n,m;
int dx[4]={1,-1,0,0};
int dy[4]={0,0,-1,1};
struct node{
int x,y;
}r,rr;
int bfs(int x,int y)
{
queue<node>q;
r.x=x;
r.y=y;
q.push(r);
while(q.size()!=0)
{
r=q.front();
q.pop();
for(int i=0;i<4;i++)
{
rr.x=r.x+dx[i];
rr.y=r.y+dy[i];
if(mp[rr.x][rr.y]==1&&rr.x>=1&&rr.x<=n&&rr.y>=1&&rr.y<=m&&mpp[rr.x][rr.y]==0)
{
mpp[rr.x][rr.y]=1;
q.push(rr);
}
}
}
return 0;
}
int main()
{
int t;
cin>>t;
while(t--)
{
cin>>n>>m;
int ans=0;
memset(mp,0,sizeof(mp));
memset(mpp,0,sizeof(mpp));
for(int i=1;i<=n;i++)
{
string s;
cin>>s;
s=" "+s;
for(int j=1;j<=m;j++)
{
mp[i][j]=s[j]-'0';
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(mp[i][j]==1&&mpp[i][j]==0)
{
mpp[i][j]=1;
ans++;
bfs(i,j);
}
}
}
cout<<ans<<endl;
}
}