Gym 102800
A:没什么好说的,直接上代码
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
map<string,int>p;
int main()
{
string a;
string b;
string c;
int n;
cin>>n;
p["A"]=1;
p["A#"]=2;
p["B"]=3;
p["C"]=4;
p["C#"]=5;
p["D"]=6;
p["D#"]=7;
p["E"]=8;
p["F"]=9;
p["F#"]=10;
p["G"]=11;
p["G#"]=12;
while(n--)
{
cin>>a>>b>>c;
int k,u;
if(p[b]-p[a]>=0)
k=p[b]-p[a];
else k=p[b]+12-p[a];
if(p[c]-p[b]>=0)
u=p[c]-p[b];
else u=p[c]+12-p[b];
if(k==3&&u==4)
cout<<"Minor triad"<<endl;
else if(k==4&&u==3)
cout<<"Major triad"<<endl;
else cout<<"Dissonance"<<endl;
}
}
B:仍然是签到题
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int get(char *ch, int length)
{
int ans = 0;
int x = 1;
for(int i = 1;i<=length;i++)
{
ans+=(ch[i]-'0')*x;
x*=10;
}
return ans;
}
int main()
{
int t;
cin>>t;
int n, k;
char ch[20];
int a[1110];
while(t--)
{
int cnt1 = 0;
cin>>n>>k;
char s[1110];
for(int i = 1;i<=n;i++)
{
cin>>s;
int len = strlen(s);
int length = 0;
for(int i = len-1;s[i]!='/';i--)
{
ch[++length] = s[i];
}
a[++cnt1] = get(ch,length);
}
sort(a+1,a+1+cnt1);
for(int i = 1;i<=k;i++)
{
if(i == 1)
cout<<a[i];
else
cout<<" "<<a[i];
}
cout<<endl;
}
return 0;
}
C:是一道dp题,这里就不写了,推荐一下其他人的代码
链接 这道题挺典型的,时间也不会卡的太紧,会写dp就能过了
E:是一个思维题,主要思路是小于最小值的数都能被直接去掉。而如果有相同的最小值就输出除以二(上取整)后的结果。需要注意的是最小值不一定是给的值,可能是余出来的
这里给出一种解法,瞎写的,不保证最正确
我的思路是如果给出的值就只有一个最小值就直接输出一,否则将每个数都对最小值取余,看能不能有更小值
#include <stdio.h>
#include <string.h>
typedef long long ll;
const int maxn = 1e9 + 7;
ll a[1000010];
int main()
{
ll t, n;
int flag;
scanf("%lld",&t);
while(t--)
{
flag=0;
ll minn=1e9+15;
ll count_one=1;
scanf("%lld",&n);
for(ll i=0; i<n; i++)
{
scanf("%lld",&a[i]);
if(minn>a[i])
{
minn=a[i];
count_one=1;
}
else if(minn==a[i])
count_one++;
}
if(count_one==1)
printf("1\n");
else if(count_one!=1)
{
for(int i=0; i<n; i++)
{
if(a[i]%minn!=0)
{
flag=1;
break;
}
}
if(flag==1)
{
printf("1\n");
continue;
}
if(count_one%2!=0)
count_one+=1;
printf("%lld\n", count_one/2);
}
}
return 0;
}
G:找规律 这种题就打个表(就是将各种情况用暴力写出来)看看有什么规律
易知 不管输入是几 打出来的表都是一样的 只有当一个点的横纵坐标都是平方数这个点才会是一 要用到两个函数,开方函数和下取整函数
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll n,m;
int t;
cin>>t;
while(t--)
{
cin>>n>>m;
n=floor(sqrt(n));
m=floor(sqrt(m));
cout<<n*m<<endl;
}
return 0;
}
时间关系,其他的不写了