A - Vasya and Football
#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
using namespace std;
#define MAXN 100
char away[28], home[28];
int pa[MAXN], ph[MAXN], n;
bool visa[MAXN], vish[MAXN];
struct Message
{
int time, id;
char team[4], color[4];
Message() {}
void in()
{
scanf("%d %s %d %s", &time, team, &id, color);
}
bool operator <(const Message &argu) const
{
return time < argu.time;
}
}mm[MAXN];
int main()
{
// freopen("A.in", "r", stdin);
scanf("%s%s", home, away);
scanf("%d", &n);
memset(pa, 0, sizeof(pa));
memset(ph, 0, sizeof(ph));
memset(visa, false, sizeof(visa));
memset(vish, false, sizeof(vish));
for(int i = 0; i < n; i++)
mm[i].in();
sort(mm, mm + n);
for(int i = 0; i < n; i++)
{
if(strcmp(mm[i].team, "a") == 0)
{
if(strcmp(mm[i].color, "y") == 0)
pa[mm[i].id]++;
else
pa[mm[i].id] += 2;
if(pa[mm[i].id] >= 2 && !visa[mm[i].id])
{
visa[mm[i].id] = true;
printf("%s %d %d\n", away, mm[i].id, mm[i].time);
}
}
else
{
if(strcmp(mm[i].color, "y") == 0)
ph[mm[i].id]++;
else
ph[mm[i].id] += 2;
if(ph[mm[i].id] >= 2 && !vish[mm[i].id])
{
vish[mm[i].id] = true;
printf("%s %d %d\n", home, mm[i].id, mm[i].time);
}
}
}
return 0;
}
B - Vasya and Wrestling
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
using namespace std;
#define MAXN 200010
#define LL long long
int f[MAXN], s[MAXN], ftop, stop;
int tag, x;
LL score;
int cmp()
{
int len = min(ftop, stop);
for(int i = 0; i < len; i++)
{
if(f[i] > s[i])
return 1;
if(f[i] < s[i])
return -1;
}
if(ftop > stop)
return 1;
if(ftop < stop)
return -1;
return 0;
}
int main()
{
// freopen("B.in", "r", stdin);
int n;
scanf("%d", &n);
score = 0;
for(int i = 0; i < n; i++)
{
scanf("%d", &x);
score += (LL)x;
if(x > 0)
f[ftop++] = x, tag = 0;
else
s[stop++] = -x, tag = 1;
}
if(score > 0)
printf("first\n");
else if(score < 0)
printf("second\n");
else
{
int flag = cmp();
if(flag > 0)
printf("first\n");
else if(flag < 0)
printf("second\n");
else
{
if(tag == 0)
printf("first\n");
else
printf("second\n");
}
}
return 0;
}
C - Vasya and Basketball
#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
using namespace std;
#define MAXN 200010
#define INF 2*1e9
#define LL long long
LL a[MAXN], b[MAXN], d[2 * MAXN];
int n, m, dtop, atop, btop;
int x, ax, bx;
int main()
{
// freopen("C.in", "r", stdin);
// freopen("C.out", "w", stdout);
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%I64d", a + i);
a[i] *= 2;
d[i] = a[i] - 1;
}
scanf("%d", &m);
for(int i = 0; i < m; i++)
{
scanf("%I64d", b + i);
b[i] *= 2;
d[n + i] = b[i] - 1;
}
d[n + m] = INF;
sort(a, a + n);
sort(b, b + m);
sort(d, d + n + m + 1);
dtop = 0;
for(LL i = 1; i <= n + m; i++)
if(d[i] != d[dtop])
d[++dtop] = d[i];
x = atop = btop = ax = bx = 0;
for(int i = 0; i <= dtop; i++)
{
while(a[atop] < d[i])
{
if(atop == n)
break;
atop++;
}
while(b[btop] < d[i])
{
if(btop == m)
break;
btop++;
}
if(btop - atop >= x)
{
x = btop - atop;
if((ax > atop && (bx - ax == x)) || (bx - ax < x))
{
ax = atop;
bx = btop;
}
}
}
printf("%d:%d\n", ax * 2 + (n - ax) * 3, bx * 2 + (m - bx) * 3);
return 0;
}
D - Vasya and Chess
貌似cf上的題解已經講了,代碼很簡單,但是不想去做了。。