第一次模拟赛
第1题
不要用(a*b)/c,要用(a/c)* (b/c)
注意考虑特殊值如果a和b特别大,c=1,则a*b的数据范围会爆int,使用longlong存储保险。
int范围最大在-2147483648~2147483647,大约2.1 × 10^9
long long范围-9,223,372,036,854,775,808~9,223,372,036,854,775,807,大约9.2×10^{18}
#include <iostream>
using namespace std;
int main()
{
long long a, b, c;
cin >> a >> b >> c;
// 计算长和宽分别可以放置多少个正方形
long long m = a / c;
long long n = b / c;
//相乘为一共可以放多少个正方形
cout << m * n;
return 0;
}
第2题
#include <bits/stdc++.h>
using namespace std;
int T, x, y;
int main()
{
cin >> T;
while (T--)
{
cin >> x >> y;
int minn = 1e9; // 初始化
// 枚举可能的4个面包的组数i,3组y价格的面包会超出10个 (3*4=12 > 10)
for (int i = 0; i <= 2; i++)
{
int j = 10 - 4 * i;
if (j >= 0 && j % 2 == 0)
{
int a = j / 2;
int sum = a * x + i * y;
if (sum < minn)
{
minn = sum;
}
}
}
cout << minn << endl;
}
return 0;
}
第3题
#include<bits/stdc++.h>
using namespace std;
int n,t;
bool f[1010];
double x,y;
int main()
{
cin>> n >> t;
while(t--)
{
cin >> x >> y;
for(int i = x; i <= y; i++)
{
f[i] = !f[i];
}
}
bool flag = false;
for(int i = 1; i <= n; i++)
{
if(f[i] == 1)
{
cout << i << " ";
flag = true;
}
}
if(!flag)
{
cout << "-1";
}
return 0;
}
第4题
#include <iostream>
using namespace std;
int a[110];
int f[110];
int main()
{
int n;
cin >> n;
bool flag = false;
for(int i = 1; i <= n; i++)
{
cin >> a[i];
f[a[i]]++;
}
for(int i = 1; i <= n; i++)
{
if(f[i]>1 || a[i]>n || a[i]<1)
{
flag = true;
break;
}
}
if(flag == false)
{
cout << "NO";
}
else
{
cout << "YES";
}
return 0;
}