A:
根据题意,每两两配对,而且k只会等于1或2,那就可以直接sort一下
遍历数组,当前元素和在一个元素进行匹配,不相等就输出,并且指针往后移。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=3e6+5;
const int maxm=6200+5;
int a[maxn];
int n,k;
int main()
{
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
sort(a,a+n);
int dis=k;
for(int i=0;i<n;i++)
{
if(a[i]==a[i+1]) i++;
else
{
printf("%d",a[i]);dis--;
if(dis==1) cout<<" ";
if(dis==0) return 0;
}
}
return 0;
}
G:
数据范围比较小,可以直接暴力找
dfs找,找到之后递归继续找,知道找不到为止 return
#include <bits/stdc++.h>
#include <cmath>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
char a[100000+5];
char b[10+5];
int ans;
int lena,lenb;
bool vis[maxn];
bool judge(int a,int b)
{
if(a==b||a==b+32||a==b-32)
return true;
else return false;
}
void dfs()
{
int cnt=0;
for(int i=0;i<lenb;i++)
{
for(int j=0;j<lena;j++)
{
if(judge((int)b[i],(int)a[j])&&!vis[j])
{
vis[j]=true;
cnt++;
break;
}
}
}
if(cnt==lenb){
ans++;dfs();}
else return ;
}
int main()
{
scanf("%s",a);scanf("%s",b);
lena=strlen(a);
lenb=strlen(b);
dfs();
cout<<ans<<endl;
return 0;
}
H:最短路模版题
我用的dijkstra+堆优化
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=2500+5;
const int maxm=6200+5;
int head[maxn];
int cnt;
int dis[maxn];
int n,m,s;
int vis[maxn];
struct edge
{
int to,next,dis;
}e[maxm*2];
void addedge(int u,int v,int w)
{
cnt++;
e[cnt].to=v;
e[cnt].dis=w;
e[cnt].next=head[u];
head[u]=cnt;
}
struct node
{
int pos,dis;
bool operator <(const node &x)const
{
return x.dis<dis;
}
};
priority_queue<node>q;
inline void dijkstra()
{
for(int i=1;i<=n;i++) dis[i]=0x3f3f3f3f;
dis[s]=0;
q.push((node){s,0});
while(!q.empty())
{
node tmp=q.top();
q.pop();
int x=tmp.pos;
if(vis[x]) continue;
vis[x]=1;
for(int i=head[x];i;i=e[i].next)
{
int y=e[i].to;
if(dis[y]>dis[x]+e[i].dis)
{
dis[y]=dis[x]+e[i].dis;
if(!vis[y])
{
q.push((node){y,dis[y]});
}
}
}
}
}
int main()
{
int a,b;
scanf("%d%d%d%d",&n,&m,&a,&b);
for(int i=0;i<m;i++)
{
int u,v,w;scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
addedge(v,u,w);
}
s=a;
dijkstra();
printf("%d\n",dis[b]);
return 0;
}