E-E
https://vjudge.net/problem/AtCoder-diverta2019_b
给你 a, b, c ,n就是问你有多少(ia+jb+k*c)等于n的答案i,j,k任意几个都可以为零
两种思想,数据量比较小,那么可以三重循环+减枝,或者枚举两个变量算出第三个
代码如下:
第一种三重循环
#include <bits/stdc++.h>
using namespace std;
using ll =long long;
ll v[10000010];
ll A,B,C,n;
ll ans;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>A>>B>>C>>n;
for(int i=0;i<=n;i++){
for(int j=0;j<=n/B;j++){
for(int k=0;k<=n/C;k++){
if(A*i+B*j+C*k==n){
ans++;
}else if(A*i+B*j+C*k>=n){
break;
}
}
}
}
cout<<ans;
}
第二种
两重循环算第三个
#include <bits/stdc++.h>
using namespace std;
using ll =long long;
ll v[10000010];
ll A,B,C,n;
ll ans;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>A>>B>>C>>n;
for(int i=0;i*A<=n;i++){
for(int j=0;j*B+A*i<=n;j++){
int p=n-i*A-j*B;
if(p%C==0)ans++;
}
}
cout<<ans;
}
D-D
https://vjudge.net/contest/640017#problem/D、
D和E差不多,这个是输出一个满足条件的就可以
我们遍历两重循环,算出满足条件的第三个值就行
代码如下:
#include <bits/stdc++.h>
using namespace std;
using ll =long long;
ll v[10000010];
ll l,n,m;
int main() {
ll N;
cin >> N;
for (ll h = 1; h <= 3500; ++h) {
for (ll n = 1; n <= 3500; ++n) {
long long numerator = 4LL * h * n - N * (h + n);
long long denominator = N * h * n;
if (numerator > 0 && denominator % numerator == 0) {
ll w = static_cast<ll>(denominator / numerator);
if (w > 0) {
cout << h << " " << n << " " << w << std::endl;
return 0;
}
}
}
}
return 0;
}
F-F
https://vjudge.net/contest/640017#problem/F
给你一定数量的子串,问你能构成的有AB的子串的最多数量
模拟题,找到A为末尾为a,B为开头的数量为b,还需要判断既有上面两种都有的情况,
然后计算出最多数量为a,bl里面小那个,还需要特判一下a等于b等于c情况
代码如下
#include <bits/stdc++.h>
using namespace std;
using ll =long long;
ll l,n,m;
vector<string>v(100000);
vector<ll>vt(1000000);
string s3;
ll a=0,b=0,c=0;
int fun2(const std::string& str, const std::string& sub){
int num = 0;
ll len = sub.length();
if (len == 0)len=1;//应付空子串调用
for (ll i=0; (i=str.find(sub,i)) != std::string::npos; num++, i+=len);
return num;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
cin>>v[i];
if(v[i][0]=='B'){
b++;
}
if(v[i][v[i].length()-1]=='A'){
a++;
}
if(v[i][v[i].length()-1]=='A'&&v[i][0]=='B'){
c++;
}
}
if(a==b&&b==c){
if(c!=0){
a=c-1;
b=c-1;
}
}
ll ans=0;
for(int i=1;i<=n;i++){
ans+= fun2(v[i],"AB");
}
cout<<ans+min(a,b);
}
标签:std,7.12,zhaosang,int,ll,cin,long,using,友谊赛
From: https://www.cnblogs.com/dontian/p/18301925