- 伍衍 的博客
国庆模拟赛DAY02总结
- @ 2024-10-3 15:19:22
考试错误:在考试时想到了先拿价值高的,但是没有想到可以交换拿的顺序 。
思路:
由于题目中的 互不相同,所以可以直接按时间顺序拿价值前 大的金币,总的来说就是一道求 个数中前 大的数的和。
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+50;
struct PII{
int t;
int u;
bool operator<(const PII& T) const{
return u>T.u;
}
}a[N];
signed main(){
freopen("coin.in","r",stdin);
freopen("coin.out","w",stdout);
int n,k;
cin >> n >> k;
for(int i=1;i<=n;i++) cin >> a[i].t;
for(int i=1;i<=n;i++) cin >> a[i].u;
sort(a+1,a+n+1);
int ans=0;
for(int i=1;i<=k;i++){
ans+=a[i].u;
}
cout << ans;
}
考试错误:无。
思路:
没啥可讲的,直接暴力深搜即可。
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
int mx=-1,n;
string a,b;
int A,B;
void dfs(int u){
if(u>=n){
mx=max(mx,A*B);
return;
}
A=A*10+a[u]-'0';
B=B*10+b[u]-'0';
dfs(u+1);
A/=10;
B/=10;
A=A*10+b[u]-'0';
B=B*10+a[u]-'0';
dfs(u+1);
A/=10;
B/=10;
}
signed main(){
freopen("mul.in","r",stdin);
freopen("mul.out","w",stdout);
cin >> a >> b;
n=a.size();
dfs(0);
cout << mx;
}
考试错误:无。
思路:
一道高精度模版题。答案为 。证明如下:
个瓶子 瓶饮料 个瓶子 + 瓶的饮料
个瓶子 瓶的饮料
个瓶子 瓶的饮料
证毕。
代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
vector<int> div(vector<int> &A,int b){
vector<int> C;
int t=0,r=0;
for(int i=A.size()-1;i>=0;i--){
t=r*10+A[i];
C.push_back(t/b);
r=t%b;
}
reverse(C.begin(),C.end());
while(C.back()==0&&C.size()>1){
C.pop_back();
}
return C;
}
signed main(){
freopen("drink.in","r",stdin);
freopen("drink.out","w",stdout);
string n;
int k;
cin >> n >> k;
vector<int> A;
for(int i=n.size()-1;i>=0;i--){
A.push_back(n[i]-'0');
}
k--;
vector<int> C=div(A,k);
for(int i=C.size()-1;i>=0;i--){
cout << C[i];
}
}