A - New Scheme
题意:输出Yes的数要满足3种情况
1.升序的情况,也就是后面的数大于前面的
2.满足范围在100~675之间
3.满足可以整除25
思路:直接3个判断条件即可
AC代码:
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long LL;
const int N = 1010;
//int s1, s2, s3, s4, s5, s6, s7, s8;
int a[N];
int main()
{
for(int i = 1; i <= 8; i ++) cin >> a[i];
for(int i = 1; i <= 8; i ++)
{
if(a[i - 1] > a[i])
{
cout << "No";
return 0;
}
if(a[i] < 100 || a[i] > 675)
{
cout << "No";
return 0;
}
if(a[i] % 25 != 0)
{
cout << "No";
return 0;
}
}
cout << "Yes";
return 0;
}
B - Default Price
题意:有C[N]个寿司和D[M]个盘子,价格从P[0]~~P[M],分别由颜色,找出是否有寿司和盘子颜色一样,一样的话价格对应D[i]--P[i];不一样的话价格都为P[0].求出这些寿司的价格
思路:一开始想到用暴力去做,还以为看错题目wa了三次,导致很晚才写完B,正常暴力解法超过n,m超过1e5就过不了了,还可以用map做时间复杂度O(n)。
AC代码:
暴力解法:
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long LL;
const int N = 10010;
int n, m, p[N], ans, sum1, sum2;
string s1[N], s2[N];
int main()
{
cin >> n >> m;
for(int i = 1; i <= n; i ++) cin >> s1[i];
for(int j = 1; j <= m; j ++) cin >> s2[j];
for(int k = 0; k <= m; k ++) cin >> p[k];
for(int i = 1; i <= n; i ++)
{
for(int j = 1; j <= m; j ++)
{
if(s1[i] == s2[j])
{
ans ++;
sum1 += p[j];
}
}
}
sum2 = p[0] * (n - ans);
cout << sum1 + sum2 << endl;
return 0;
}
map解法:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 200010;
int a[N];
double n, k, ans;
int main()
{
int n , m;
cin >> n >> m;
vector<string> a(n) , b(m + 1);
vector<int> c(m + 1);
for(int i = 0 ; i < n ; i ++ ) cin >> a[i];
for(int i = 1 ; i <= m ; i ++ ) cin >> b[i];
for(int i = 0 ; i <= m ; i ++ ) cin >> c[i];
map<string , int> mp;
for(int i = 1 ; i <= m ; i ++ )
mp[b[i]] = c[i];
LL ans = 0;
for(int i = 0 ; i < n ; i ++ )
{
if(mp[a[i]]) ans += mp[a[i]];
else ans += c[0];
}
cout << ans << endl;
}
C - Standings
暂时还没写出来,等写出来再补上