开始: 2025-06-21 09:28:31

第一次模拟赛

结束: 2025-06-21 10:30:00
当前: 2025-0707-0101 23:57:58  类型:IOI 状态:已经结束 

第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;
}