济南CSPS储备营DAY-2

· · 个人记录

代码呈现:

int ksm(int a,int b,int p)
{
    int ret=1;
    for(;b;b>>=1,a=(long long)a*a%p);
    {
        if(b&1)ret=(long long)ret*a%p;
    }
    return ret;
}//for循环 
int ksm2(int a,int b,int p)
{
    if(b==0)return 1%p;
    if(b==1)return a%p;
    long long men=ksm2(a,b>>1,p);
    if(b&1)return men*men%p*a%p;
    return men*men%p;
}//递归 

代码如下:

#include <bits/stdc++.h>

using namespace std;

const int N = 1e6 + 10;
inline int read() {
    int x = 0, f = 1;
    char ch = getchar();
    while(ch < '0' || ch > '9') {
        if (ch == '-') f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9') {
        x = x * 10 + ch - 48;
        ch = getchar();
    }
    return x * f;
}

int n, k;
int a[N];

int q[N], head, tail;

int mx[N], mn[N];

signed main() {
    n = read(), k = read();
    for(int i = 1; i <= n; ++ i)
        a[i] = read();
    head = 1, tail = 0;
    for(int i = 1; i <= n; ++ i) {
        while(head <= tail && a[q[tail]] <= a[i]) --tail;
        q[++ tail] = i;
        while(head <= tail && q[head] <= i - k) ++ head;
        if(i >= k) mx[i] = a[q[head]];
    }
    head = 1, tail = 0;
    for(int i = 1; i <= n; ++ i) {
        while(head <= tail && a[q[tail]] >= a[i]) --tail;
        q[++ tail] = i;
        while(head <= tail && q[head] <= i - k) ++ head;
        if(i >= k) mn[i] = a[q[head]];
    }
    for (int i = k; i <= n; ++ i)
        cout << mn[i] << " ";
    puts("");
    for (int i = k; i <= n; ++ i)
        cout << mx[i] << " ";
    puts("");
    return 0;
}

代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,ans;
int dr[1145],fa[1145];
bool flag[1010];
int getf(int x){
    if(fa[x]==x) return x;
    return fa[x]=getf(fa[x]);
}
int main(){
    cin>>n>>m;
    char c;
    int x,y;
    for(int i=1;i<=n;i++) fa[i]=i;
    for(int i=1;i<=m;i++){
        cin>>c>>x>>y;
        if(c=='F')
            fa[getf(x)]=getf(y);
        else {
            if(!dr[x]) dr[x]=y;
            else fa[getf(y)]=getf(dr[x]);
            if(!dr[y]) dr[y]=x;
            else fa[getf(x)]=getf(dr[y]);
        }
    }
    for(int i=1;i<=n;i++)
    {
        flag[getf(i)]=1;
    }
    for(int i=1;i<=n;i++)
    {
        if(flag[i])
        {   
            ans++;
        }
    }
    cout<<ans;
    return 0;
}

P1551 亲戚 代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,p,a,b,f[5555];
int getf(int x)
{
    if(f[x]!=x)
    {
        return getf(f[x]);
    }
    else return x;
}
void merge(int a,int b)
{
    int fa=getf(a);
    int fb=getf(b);
    if(fa!=fb)
    {
        f[fb]=fa;
    }
}
int main()
{
    cin>>n>>m>>p;
    for(int i=1;i<=n;i++)
    {
        f[i]=i;
    }   
    for(int i=1;i<=m;i++)
    {

        cin>>a>>b;
        merge(a,b);
    }
    while(p--)
    {
        cin>>a>>b;
        if(getf(a)==getf(b))
        {
            cout<<"Yes"<<endl;
        }
        else
        {
            cout<<"No"<<endl;
        }
    }
    return 0;
 } 

本章结