130331周赛 (一)

2014-11-24 03:12:51 · 作者: · 浏览: 5

A. Roma and Changing Signs
此题最希望的是能把所有的负数都变成正数,当负数个数>=操作数,由小到大变正;当负数个数<操作数时,剩下的操作数只对最小的操作。


[cpp]
#include
#include
#include
#include
using namespace std;

int n,k;
int a[100005];

int main()
{
int i,j;
while(cin >> n >> k)
{
int cnt = 0;
for(i=0; i {
scanf("%d",&a[i]);
if(a[i] < 0)
cnt ++;
}
if(cnt >= k)
{
for(i=0; i a[i] = -a[i];
}
int t = 0;
if(cnt < k)
{
for(i=0; i a[i] = -a[i];
t = (k - cnt) % 2;
sort(a,a+n);
if(t == 1)
a[0] = -a[0];
}
long long sum = 0;
for(i=0; i sum += a[i];
cout << sum << endl;
}
return 0;
}

#include
#include
#include
#include
using namespace std;

int n,k;
int a[100005];

int main()
{
int i,j;
while(cin >> n >> k)
{
int cnt = 0;
for(i=0; i {
scanf("%d",&a[i]);
if(a[i] < 0)
cnt ++;
}
if(cnt >= k)
{
for(i=0; i a[i] = -a[i];
}
int t = 0;
if(cnt < k)
{
for(i=0; i a[i] = -a[i];
t = (k - cnt) % 2;
sort(a,a+n);
if(t == 1)
a[0] = -a[0];
}
long long sum = 0;
for(i=0; i sum += a[i];
cout << sum << endl;
}
return 0;
}

B. Maxim and Discounts
活动有几种,买n送2,贪心的角度,选择n最小的。因为送的两件商品价格必须低于买的n件,所以将商品从大到小排序。


[cpp]
#include
#include
#include
#include
#include
using namespace std;
int n,m;
int a[100005],q[100005];

bool cmp(int a,int b)
{
return a > b;
}
int main()
{
int i,j;
while(cin >> m)
{
int minm = 100000000;
for(i=0; i {
scanf("%d",&q[i]);
if(minm > q[i])
minm = q[i];
}
cin >> n;
for(i=0; i scanf("%d",&a[i]);
sort(a,a+n,cmp);

int sum = 0,cnt = minm,tmp = 0;
for(int i=0; i {
if(tmp > 0)
{
tmp --;
cnt = minm;
continue;
}
cnt --;
if (cnt == 0)
tmp = 2;
sum += a[i];
}
cout << sum << endl;
}
return 0;
}

#include
#include
#include
#include
#include
using namespace std;
int n,m;
int a[100005],q[100005];

bool cmp(int a,int b)
{
return a > b;
}
int main()
{
int i,j;
while(cin >> m)
{
int minm = 100000000;
for(i=0; i {
scanf("%d",&q[i]);
if(minm > q[i])
minm = q[i];
}
cin >> n;
for(i=0; i scanf("%d",&a[i]);
sort(a,a+n,cmp);

int sum = 0,cnt = minm,tmp = 0;
for(int i=0; i {
if(tmp > 0)
{
tmp --;
cnt = minm;
continue;
}
cnt --;
if (cnt == 0)
tmp = 2;
sum += a[i];
}
cout << sum << endl;
}
return 0;
}

D. Squares
水题,看完就能做了


[cpp]
#include
#include
#include
#include

using namespace std;

bool cmp(int a,int b)
{
return a >b;
}

int a[55];
int n,k;
int main()
{
int i;
while(cin >> n >> k)
{
for(i=1; i<=n; i++)
cin >> a[i];
if(k > n)
{
cout << -1 << endl;