这绝对是期末考试之前最后一次更文了,我以后绝对不自己找气受了。虽然这次排名确实达到了有史以来最高一次吧,但是真的难蚌,因为差一点我就开出了,能让排名更高的,然后我的报名了也没打,我真的无能狂怒,想骂人了。然后这次题质量也不错,由简单到难。
分析
:很简单,手速题,不过我差点还错了,输出即可。
:提示很重要,提示的意思就是我们可以从开始往枚举,然后分解每个数,将因数放进一个 ,然后我们去看这里面的每个因数是不是在之间,是就进入下一轮遍历,如果不是,那就是最大的数,如果输出,那么我们可以断定,因此时间复杂度就是,显然很容易通过。
:这是一个诈骗题,开始被骗了,开始还以为是缩点,后来发现它是个,就是个很简单的并查集+,我们先把所有边权的和用并查集合并,然后我们枚举一下每段他们的祖先是不是都一样,如果有不一样的,说明输出,否则就输出,这一步是最难得,我开始没发现是并查集,直接写假了,我草了,然后找了半天的,考试时间过去了,懊恼不已,然后下一步我们考虑既然所有的相同类型的点内部两两最短路都是,那么我们显然可以将这些点合并成一个点,然后跑一遍即可,时间复杂度。然后就结束了,我的评价是不如上次周赛的。
代码
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
void solve(){
string s;
cin>>s;
for(int i=0;i<s.size();i++) cout<<char(s[i]+32);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr),cout.tie(nullptr);
int t=1;
while(t--) solve();
return 0;
}
:
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
map<int,int> mp;
void solve(){
int a,b;
vector<int> res;
cin>>a>>b;
int maxn=-1;
for(int c=b;c>=a;c--){
res.clear();
for (int i=1;i<=c/i; i++){
if (c%i == 0){
res.push_back(i);
if(i!=c/i) res.push_back(c/i);
}
}
bool ok=false;
for(int i=0;i<res.size();i++){
if(res[i]>=2 && res[i]<=a){
ok=true;
break;
}
}
if(ok==false){
maxn=c;
break;
}
}
cout<<maxn;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr),cout.tie(nullptr);
int t=1;
while(t--) solve();
return 0;
}
:
//屎山既视感
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
const int N=200010;
int n,m,idx=0,id[N],k,a[N],b[N],c[N];
int mp[N],fa[N];
bool flag[N];
int d[510][510];
void floyd(){
for(int kk=1;kk<=k;kk++){
for(int i=1;i<=k;i++){
for(int j=1;j<=k;j++){
d[i][j]=min(d[i][j],d[i][kk]+d[kk][j]);
}
}
}
}
int find(int x){
if(fa[x]!=x) fa[x]=find(fa[x]);
}
void solve(){
memset(flag,0,sizeof flag);
memset(d,0x3f,sizeof d);
cin>>n>>m>>k;
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<=k;i++) d[i][i]=0;
id[0]=0;
for(int i=1;i<=k;i++){
cin>>id[i];
id[i]+=id[i-1];
for(int j=id[i-1]+1;j<=id[i];j++){
//cout<<j<<" ";
if(id[i]==id[i-1]+1) flag[id[i]]=true;
mp[j]=i;//每个点组别
//fa[j]=i;
}
}
bool ok=true;
for(int i=1;i<=m;i++){
cin>>a[i]>>b[i]>>c[i];
int l=find(a[i]),r=find(b[i]);
if(c[i]==0){
if(l==r) continue;
else{
fa[l]=r;
}
}
}
for(int i=1;i<=k;i++){
//cin>>id[i];
// id[i]+=id[i-1];
int l=find(id[i-1]+1);
for(int j=id[i-1]+1;j<=id[i];j++){
int r=find(j);
if(r!=l){
cout<<"No\n";
return;
}
}
}
cout<<"Yes\n";
for(int i=1;i<=m;i++){
int l=mp[a[i]],r=mp[b[i]];
d[l][r]=d[r][l]=min(d[l][r],c[i]);
}
floyd();
for(int i=1;i<=k;i++){
for(int j=1;j<=k;j++){
if(d[i][j]==0x3f3f3f3f) cout<<-1<<" ";
else cout<<d[i][j]<<" ";
}
cout<<"\n";
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr),cout.tie(nullptr);
int t=1;
while(t--) solve();
return 0;
}
加油吧,争取下次能,当然是期末考试结束后!