Link。
T1
依题计算即可,\(O(1)\)。
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
ios::sync_with_stdio(0);
double n; cin>>n,n=ceil(n/5.0);
cout<<setprecision(2)<<fixed;
if(n<=100) cout<<0.588*n;
else if(n<=200) cout<<58.8+0.688*(n-100.0);
else cout<<127.6+0.788*(n-200.0);
return 0;
}
T2
dfs,\(O(n!)\)。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,ans;
int a[31][31];
bool vis[31];
void dfs(int x,int s){
if(x==n+1){
ans=max(ans,s);
return;
}
for(int i=1;i<=n;i++)
if(!vis[i])
vis[i]=1,dfs(x+1,s+a[i][x]),vis[i]=0;
}
signed main(){
ios::sync_with_stdio(0);
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
dfs(1,0);
cout<<ans;
return 0;
}
T3
在线处理每一位同学,并使用插入排序,\(O(n^2)\)。
胡了一个 \(O(An)\)(\(A\) 为值域) 的桶做法但是 WA 了,有心情再补。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e4+5;
int n,d,tot;
double s;
char f;
pair<int,double> a[N];
signed main(){
ios::sync_with_stdio(0);
cout<<setprecision(2)<<fixed,cin>>n;
for(int i=1;i<=n;i++){
cin>>d>>s>>f;
if(f=='Y')
cout<<a[max(1ll,i/5)].first<<' '<<a[max(1ll,i/5)].second<<'\n';
else{
a[++tot]={d,s};
for(int j=tot;j>=2;j--){
if(a[j].second>a[j-1].second) swap(a[j],a[j-1]);
else if(a[j].second==a[j-1].second&&a[j].first<a[j-1].first) swap(a[j],a[j-1]);
}
cout<<a[max(1ll,i/5)].first<<' '<<a[max(1ll,i/5)].second<<'\n';
}
}
return 0;
}
总结:因为报名了但没打,所以没有总结。
标签:Living,cout,int,long,second,dfs,ans,周考,Dream From: https://www.cnblogs.com/XOF-0-0/p/18048812