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;