ZZULI-2019年3月份月赛(个人赛)

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;
}

猜你喜欢

转载自blog.csdn.net/wzazzy/article/details/88093350