A - ASCII code
code:
#include<bits/stdc++.h>
int main()
{
int i;
scanf("%d",&i);
printf("%c",i);
return 0;
}
B - Takahashi's Failure
code:(极其暴力……)
#include<bits/stdc++.h>
using namespace std;
int arr1[105],ans[105],idx=0;
struct node{
int num,a;
}arr[105];
bool cmp(node x,node y){
return x.a>y.a;
}
int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++){
scanf("%d",&arr[i].a);
arr[i].num=i;
}
for(int i=1;i<=k;i++)
scanf("%d",&arr1[i]);
sort(arr+1,arr+n+1,cmp);
for(int i=1;i<=n;i++){
if(i!=1&&arr[i].a==arr[i-1].a)
ans[++idx]=arr[i].num;
else if(i==1)
ans[++idx]=arr[i].num;
else
break;
}
for(int i=1;i<=k;i++){
for(int j=1;j<=idx;j++){
if(arr1[i]==ans[j]){
printf("Yes");
return 0;
}
}
}
printf("No");
return 0;
}
C - Slot Strategy
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
string s[100];
int cnt[10][10];
int ans, mx;
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++)cnt[i][j] = 0;
}
cin >> n;
for (int i = 0; i < n; i++)cin >> s[i];
for (int i = 0; i < n; i++) {
for (int j = 0; j < 10; j++) {
cnt[(s[i][j] - '0')][j]++;
}
}
ans = 1000;
for (int i = 0; i < 10; i++) {
mx = 0;
for (int j = 0; j < 10; j++) {
mx = max(mx, 10 * (cnt[i][j] - 1) + j);
}
ans = min(ans, mx);
}
cout << ans << endl;
return 0;
}
D - Distinct Trio
首先排序,统计每个数字出现次数,接下来枚举"十位”。例如对于i,在i前的所有数都可做“百位”,在i后的所有数都可做“个位”。因此我们需要枚举以数组内每个数为中心点的方案,对于每一步就为当前数量乘前面数量之和再乘后面数量之和,考虑用前缀和处理。
#include<bits/stdc++.h>
using namespace std;
long long tot[200001];
long long n=0,ans=0;
int main(){
cin>>n;
for(long long i=1;i<=n;++i){
int tmp=0;
cin>>tmp;
++tot[tmp];
}
long long l=0,r=n;
for(long long i=1;i<=200000;++i){
r-=tot[i];
ans+=l*r*tot[i];
l+=tot[i];
}
cout<<ans<<endl;
return 0;
}