题目连接:E:C. Ilya and Matrix
题目让我们用递归思路;其实,暴力分就可以了
#include<stdio.h>
#include<iostream>
#include<map>
#include<algorithm>
#include<cstring>
#include<string.h>
#include<string>
#include<math.h>
#include<vector>
#include<map>
using namespace std;
typedef long long ll;
#define MAXN 1000005*2
#define INF 0x3f3f3f3f//将近int类型最大数的一半,而且乘2不会爆int
const ll MOD = 332748118;
ll a[MAXN], b[MAXN];
int cmp(int x, int y)
{
return x>y;
}
int main()
{
memset(a, 0, sizeof(a));
ll n, sum=0, ans=0;
cin >> n;
for(int i=1; i<=n; ++i)
{
cin >> a[i];
ans+=a[i];
}
int cc=n;
while(cc)
{
for(int i=1; i<=cc; ++i)
b[i]++;
cc/=4;
}
sort(a+1, a+n+1, cmp);
for(int i=1; i<=n; ++i)
sum+=a[i]*b[i];
cout << sum << '\n';
return 0;
}
G:A. The Contest
分析:直接检索就可以了,因为机器人可以屯题,,,,,
#include<stdio.h>
#include<iostream>
#include<map>
#include<algorithm>
#include<cstring>
#include<string.h>
#include<string>
#include<math.h>
#include<vector>
#include<map>
using namespace std;
typedef long long ll;
#define MAXN 10005
#define INF 0x3f3f3f3f//将近int类型最大数的一半,而且乘2不会爆int
const ll MOD = 332748118;
int a[MAXN];
struct student
{
int a, b;
} stu[MAXN];
int cmp(student x, student y)
{
return x.a < y.a;
}
int main()
{
int n, m, sum=0;
cin >> n;
for(int i=0; i<n; ++i)
{
scanf("%d", &a[i]);
sum+=a[i];
}
cin >> m;
for(int i=0; i<m; ++i)
{
scanf("%d %d", &stu[i].a, &stu[i].b);
}
sort(stu, stu+n, cmp);
int flag=1;
for(int i=0; i<n; ++i)
{
if((stu[i].a < sum && stu[i].b > sum) || sum < stu[i].a)
{
flag=0;
cout << stu[i].a << '\n';
break;
}
if(stu[i].a == sum || stu[i].b == sum)
{
flag=0;
cout << sum << '\n';
break;
}
}
if(flag) puts("-1");
return 0;
}
H:B. Eugeny and Play List
分析:求在给出了一系列时刻时,放的是第几张唱片
#include<stdio.h>
#include<iostream>
#include<map>
#include<algorithm>
#include<cstring>
#include<string.h>
#include<string>
#include<math.h>
#include<vector>
#include<map>
using namespace std;
typedef long long ll;
#define MAXN 100005
#define INF 0x3f3f3f3f//将近int类型最大数的一半,而且乘2不会爆int
const ll MOD = 332748118;
int a[MAXN];
int bb[MAXN];
int main()
{
memset(a, 0, sizeof(a));
memset(bb, 0, sizeof(bb));
int n, m, sum=0;
cin >>n >> m;
for(int i=1; i<=n; ++i)
{
int a, b;
scanf("%d %d", &a, &b);
sum+=a*b;
bb[i] = sum;
}
for(int i=1; i<=m; ++i)
{
scanf("%d", &a[i]);
}
int x=1;
for(int i=1; i<=m; ++i)
{
if(a[i] <= bb[x])
cout << x << '\n';
else
{
x++;
i--;
}
}
return 0;
}