随便写写
这次写的非常爆炸,主要是有道题题意并不明确当然还有我自己的问题,这次难度比之前要高上不少,凑合着看吧
A
简单模拟题,没有什么可说的
]#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
int a,b;
cin >> a >> b;
if(a >= 10 || b >= 10)
{
cout << "-1" << endl;
}
else cout << a * b << endl;
return 0;
}
B
只需要找出九九乘法表中能被i整除的数,再把整除的数和10比较即可
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
int a;
cin >> a;
for(int i = 1; i <= 9; i++){
if(a % i == 0){
if(a / i < 10){
cout << "Yes" <<endl;
return 0;
}
}
}
cout << "No" << endl;
return 0;
}
C
从这道题就开始离谱起来了,主要是完全改变了以前的出题风格,有点不适应
这道题考察了思维和几何方面的知识,注意要把双曲线对半分,只用考虑一边就可以了,时间复杂度就降低到根号n
include<bits/stdc++.h>
using namespace std;
define int long long
define endl '\n'
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
int k;
cin >> k;
int p = sqrt(k);
// cout << p << endl;
int res = 0x3f3f3f3f3f3f3f3f;
for(int i = 1; i <= p; i++){
if(k % i == 0){
res = min(res,k/i+i);
}
}
cout << res - 2 << endl;
return 0;
}
D
暂时无法解析
主要是样例都不知道什么情况,2 3 4是如何确立两个三角形的暂时还没有什么说法
看题解要用树状数组?
E
贪心+二分 从思维上讲也不太容易能想到
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k,A[1000050],F[1000050];
inline bool cmp(int a,int b){return a>b;}
bool check(int x){
int res=0;
for(int i=1;i<=n;i++){
if(A[i]*F[i]>x) res+=A[i]-(x/F[i]);
}
return res<=k;
}
signed main(){
cin>>n>>k;
for(int i=1;i<=n;i++) scanf("%lld",A+i);
for(int i=1;i<=n;i++) scanf("%lld",F+i);
sort(A+1,A+1+n);
sort(F+1,F+1+n,cmp);
int L=0,R=1e18,M;
while(L<R){
M=(L+R)/2;
if(check(M)) R=M;
else L=M+1;
}
cout<<R;
return 0;
}
F
正在琢磨中,暂时还不能看懂他的dp方程
总的来说,这次打的可以说是非常难受,也让我看到了很多的不足
争取下次我能做的更好