1. 程式人生 > 其它 >【ABC】152題解

【ABC】152題解

傳送門:

A

int main(){
	int n, m; cin>>n>>m;
	if(n>m) puts("No");
	else puts("Yes");
    return 0;
}

B

int main(){
	int a, b; cin>>a>>b;
	if(a>b) swap(a, b);
	
	int ans=0;
	while(b--){
		ans=ans*10+a;
	}
	cout<<ans;
    return 0;
}

C

樹狀陣列維護一下即可

#pragma GCC optimize("O3")
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define debug(x) cerr << #x << ": " << x << endl
#define pb(a) push_back(a)
#define set0(a) memset(a,0,sizeof(a))
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define dwn(i,a,b) for(int i=(a);i>=(b);i--)
#define ceil(a,b) (a+(b-1))/b
#define INF 0x3f3f3f3f
#define ll_INF 0x7f7f7f7f7f7f7f7f
typedef long long ll;
typedef pair<int,int> PII;
typedef pair<double,double> PDD;

inline void read(int &x) {
    int s=0;x=1;
    char ch=getchar();
    while(ch<'0'||ch>'9') {if(ch=='-')x=-1;ch=getchar();}
    while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+ch-'0',ch=getchar();
    x*=s;
}

const int N=2e5+5;
int tr[N];

int lowbit(int x){return x&-x;}

void modify(int p, int v){
	for(;p<N; p+=lowbit(p)) tr[p]+=v;
}

int query(int p){
	int res=0;
	for(;p;p-=lowbit(p)) res+=tr[p];
	return res;
}

int main(){
	int n; read(n);
	
	int cnt=0;
	rep(i,1,n){
		int k; read(k);
		modify(k, 1);
		if(query(k)==1) cnt++;
	}	
	cout<<cnt;
    return 0;
}

D

\(f[i][j]\) 表示首為 \(i\) 尾為 \(j\) 的數的個數。
\(ans = \sum_{i=0}^9\sum_{j=0}^9 f[i][j]\times f[j][i]\)

#pragma GCC optimize("O3")
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define debug(x) cerr << #x << ": " << x << endl
#define pb(a) push_back(a)
#define set0(a) memset(a,0,sizeof(a))
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define dwn(i,a,b) for(int i=(a);i>=(b);i--)
#define ceil(a,b) (a+(b-1))/b
#define INF 0x3f3f3f3f
#define ll_INF 0x7f7f7f7f7f7f7f7f
typedef long long ll;
typedef pair<int,int> PII;
typedef pair<double,double> PDD;

inline void read(int &x) {
    int s=0;x=1;
    char ch=getchar();
    while(ch<'0'||ch>'9') {if(ch=='-')x=-1;ch=getchar();}
    while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+ch-'0',ch=getchar();
    x*=s;
}

int f[10][10];

int main(){
	int n; cin>>n;
	rep(i,1,n){
		string si=to_string(i);
		f[si[0]-'0'][si[si.size()-1]-'0']++;
	}
	
	int res=0;
	rep(i,0,9) rep(j,0,9) res+=f[i][j]*f[j][i];
	cout<<res<<endl;
	
    return 0;
}

E

直接用py卡過去了orz

def gcd(a, b):
    return b if a%b==0 else gcd(b, a%b)


mod=int(1e9+7)
n=int(input())

a=[int(i) for i in input().split()]
res=1
for i in a:
    res*=i//gcd(i, res)
print(sum(res//i for i in a)%mod)