2021济南站

Posted 钟钟终

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021济南站相关的知识,希望对你有一定的参考价值。

J. Joy of Handcraft

关键点:并查集对于一段区间进行合并跳转的操作。

#include <bits/stdc++.h>
#define endl '\\n'
#define int long long
#define ios (ios::sync_with_stdio(false),cin.tie(0),cout.tie(0))
#define PII pair<int,int>
#define re register
using namespace std;
const int N =1e6+5;
const int inf=1e18;
const int mod=998244353;
const double eps=1e-8;
int n,m,tax[N],f[N],ans[N],g;
struct node

    int t,x;
e[N];
bool cmp(node n1,node n2)

    return n1.x>n2.x;

int r_find(int x)

    if(x==f[x]) return f[x];
    f[x]=r_find(f[x]);
    return f[x];

void solve()

    g++;
    memset(tax,0,sizeof tax);
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>e[i].t>>e[i].x;
    sort(e+1,e+n+1,cmp);
    for(int i=0;i<=m;i++) f[i]=i,ans[i]=0;
    for(int i=1;i<=n;i++)
    
        int t=e[i].t,x=e[i].x;
        if(tax[t]) continue;
        tax[t]=1;
        for(int j=1;j<=m;j+=2*t)
        
            for(int k=j;k<j+t&&k<=m;k++)
                if(ans[k]==0) ans[k]=x,f[k-1]=k;
                else k=r_find(k);
        
    
    cout<<"Case #"<<g<<":";
    for(int i=1;i<=m;i++)
        cout<<" "<<ans[i];
    cout<<endl;

signed main()

    ios;
    int T;
    cin>>T;
    while(T--)
        solve();
    return 0;



K. Knowledge is Power

打表找规律写的,数理基础不好。。。
打表:

int n,ans;
vector<int>e;
int check()

    for(int i=0;i<e.size();i++)
        for(int j=i+1;j<e.size();j++)
            if(__gcd(e[i],e[j])!=1)
                return 0;
    return 1;

void dfs(int pos,int val,int n)

    if(val>n) return;
    if(val==n)
    
        if(check())
        
            int mi=inf,mx=0;
            for(int i=0;i<e.size();i++)
                mi=min(mi,e[i]),mx=max(mx,e[i]);
            ans=min(ans,mx-mi);
        
        return;
    
    for(int i=pos+1;i<n;i++)
    
        val+=i;
        e.push_back(i);
        dfs(i,val,n);
        val-=i;
        e.pop_back();
    

void solve()

    for(int i=5;i<=100;i++)
    
        ans=inf;
        if(i%2==0&&(i/2)%2)
        
            e.clear();
            dfs(1,0,i);
            cout<<i<<" "<<ans<<endl;
        
    

signed main()

    solve();
    return 0;

ac代码:

#include <bits/stdc++.h>
#define endl '\\n'
#define int long long
#define ios (ios::sync_with_stdio(false),cin.tie(0),cout.tie(0))
#define PII pair<int,int>
#define re register
using namespace std;
const int N =1e6+5;
const int inf=1e18;
const int mod=998244353;
const double eps=1e-8;
int x,g;
map<int,int>mp;
void solve()

    cin>>x;
    cout<<"Case #"<<g<<": ";
    if(x%2)
    
        int x1=x/2,x2=x/2+1;
        cout<<1<<endl;
    
    else if(x%2==0&&(x/2)%2==0)
    
        cout<<2<<endl;
    
    else if(x%2==0&&(x/2)%2)
    
        if(x/2==3)
        
            cout<<-1<<endl;
        
        else
        
            int tmp=((x-6)/4)%9;
            cout<<mp[tmp]<<endl;
        
    

signed main()

    mp[1]=3;mp[2]=4;mp[3]=2;mp[4]=4;
    mp[5]=3;mp[6]=2;mp[7]=3;mp[8]=3;
    mp[0]=2;
    //ios;
    int T;
    cin>>T;
    while(T--)
    
        g++;
        solve();
    
    return 0;



C - FF

复习了一下set中find函数的用法,时间复杂度为log(n)

#include <bits/stdc++.h>
#define endl '\\n'
#define int long long
#define ios (ios::sync_with_stdio(false),cin.tie(0),cout.tie(0))
#define PII pair<int,int>
#define re register
using namespace std;
const int N =1e6+5;
const int inf=1e18;
const int mod=998244353;
const double eps=1e-8;
int n,q;

void solve()

    cin>>n>>q;
    map<int,set<int>>mp;
    while(q--)
    
        int op,x,y;cin>>op;
        if(op==1)
        
            cin>>x>>y;
            mp[x].insert(y);
        
        else if(op==2)
        
            cin>>x>>y;
            mp[x].erase(y);
        
        else
        
            cin>>x>>y;
            int f1=0,f2=0;
            if(mp[x].find(y)!=mp[x].end()) f1=1;
            if(mp[y].find(x)!=mp[y].end()) f2=1;
            if(f1&&f2)
            
                cout<<"Yes"<<endl;
            
            else cout<<"No"<<endl;
        
    

signed main()

    ios;
    solve();
    return 0;



J Determinant

1.首先要根据公式推出来,矩阵行列式只受对角线元素影响。如果数理基础好一眼看出。。
2.本题的一个关键点。对大数的取模化简,不能使用double,可能会爆,还受精度影响。
3.高斯消元,保证对角线上的元素不为0.行变换注意将矩阵前加一个负号。

#include <bits/stdc++.h>
#define endl '\\n'
#define int long long
#define ios (ios::sync_with_stdio(false),cin.tie(0),cout.tie(0))
#define PII pair<int,int>
#define re register
using namespace std;
const int N =7e2+5;
const int inf=1e18;
const int mod=1e9+7;
const double eps=1e-8;
int n,a[105][105],ans;
string s;
int fun(string s)

    int res=0;
    for(int i=0;i<s.length();i++)
        res=(res*10+(s[i]-'0'))%mod;
    return res;

int qpow(int x,int y)

    int res=1;
    while(y)
    
        if(y&1) res=res*x%mod;
        x=x*x%mod;
        y>>=1;
    
    return res;

int getinv(int x)return qpow(x,mod-2);
int gauss()

    int tmp=1;
    for(int i=1;i<=n;i++)
    
        for(int j=i;j<=n;j++)
        
            if(a[i][j])
            
                for(int k=1;k<=n;k++)
                    swap(a[i][k],a[j][k]);
                if(i!=j) tmp=tmp*(-1);
                break;
            
        
        for(int j=i+1;j<=n;j++)
        
            int inv=getinv(a[i][i]);
            int g=a[j][i]*inv%mod;
            for(int k=1;k<=n;k++)
                a[j][k]=(a[j][k]-a[i][k]*g%mod+mod)%mod;
        
        tmp=(tmp*a[i][i]%mod+mod)%mod;
    
    return tmp;

void solve()

    cin>>n>>s;
    int g=fun(s);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++) cin>>a[i][j];
    int ans=gauss();
    if(ans==g)
        cout<<"+"<<endl;
    else
        cout<<"-"<<endl;


signed main()

    ios;
    int T;
    cin>>T;
    while(T--)
        solve();
    return 0;



2021CTF工业信息安全技能大赛(济南站)-可疑的文件

The 46th ICPC Asia Jinan Regional Contest,2021,46届济南站热身赛

2021全国大学生智能汽车竞赛中小学组国赛获奖名单

HDFS丨环球百城路演济南站-《论道·区块链新高度》

矩阵前面有负号怎么放进去

济南-地点-文创-宽厚里:宽厚里