A. Heating
Several days ago you bought a new house and now you are planning to start a renovation. Since winters in your region can be very cold you need to decide how to heat rooms in your house.
Your house has n rooms. In the i-th room you can install at most ci heating radiators. Each radiator can have several sections, but the cost of the radiator with k sections is equal to k2 burles.
Since rooms can have different sizes, you calculated that you need at least sumi sections in total in the i-th room.
For each room calculate the minimum cost to install at most ci radiators with total number of sections not less than sumi.
Input
The first line contains single integer n (1≤n≤1000) — the number of rooms.
Each of the next n lines contains the description of some room. The i-th line contains two integers ci and sumi (1≤ci,sumi≤104) — the maximum number of radiators and the minimum total number of sections in the i-th room, respectively.
Output
For each room print one integer — the minimum possible cost to install at most ci radiators with total number of sections not less than sumi.
Example
input
4
1 10000
10000 1
2 6
4 6
output
100000000
1
18
10
题意:
将m价值分配到最多n个单位上,花费为每个单位值的平方,求最小花费
思路:
直接联想到均值不等式所以肯定是最大限度的均摊, 试试均均摊后再均摊
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n;
int a,b;
cin >> n;
while(n--){
int ans = 0;
cin >> a >> b;
if(b <= a){
ans = b;
}
else if(b%a==0){
ans = (int)(pow(b/a,2)*a+0.5);
}
else{
int mod = b % a;
ans = (int)(pow(b/a,2)*(a-mod)+pow(b/a+1,2)*mod+0.5);
}
cout << ans << endl;
}
return 0;
}
B. Obtain Two Zeroes
You are given two integers a and b. You may perform any number of operations on them (possibly zero).
During each operation you should choose any positive integer x and set a:=a−x, b:=b−2x or a:=a−2x, b:=b−x. Note that you may choose different values of x in different operations.
Is it possible to make a and b equal to 0 simultaneously?
Your program should answer t independent test cases.
Input
The first line contains one integer t (1≤t≤100) — the number of test cases.
Then the test cases follow, each test case is represented by one line containing two integers a and b for this test case (0≤a,b≤109).
Output
For each test case print the answer to it — YES if it is possible to make a and b equal to 0 simultaneously, and NO otherwise.
You may print every letter in any case you want (so, for example, the strings yEs, yes, Yes and YES will all be recognized as positive answer).
Example
input
3
6 9
1 1
1 2
output
YES
NO
YES
**题意:**任意次操作之后能否将两个正整数同时等于0,操作规则a = a − x, b=b−2x or a:=a−2x, b:=b−x.
x>=0且为整数
思路:
刚开始脑子抽风把自己绕进去了,开窍后瞬间推出结论如图
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n,a,b;
cin >> n;
while(n--){
cin >> a >> b;
if((2*a-b)>=0&&(2*a-b)%3==0&&(2*b-a)>=0&&(2*b-a)%3==0)
cout << "YES" << endl;
else
cout << "NO" <<endl;
}
return 0;
}
剩下的明天写,睡觉了,还有早读