A - Elections
题意
n个城市,每个城市为m个候选人投票,最后胜利的人要经过两个阶段:
1.每个城市选出的票数最多且索引更小的人;
2.根据各个城市选出的候选人,选出多次选出且索引更小的为最终候选人。
代码
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
final static int MAX = (int)1e9;
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
int n,m;
int max_city,flag1;
int max_people,flag2;
int s;
int[] count = new int[100];
while(in.hasNextInt()) {
flag1 = flag2 = MAX;
max_city = -1;
n = in.nextInt();
m = in.nextInt();
Arrays.fill(count,0);
for(int i = 0;i < m;i++) {
max_people = -1;
for(int j = 0;j < n;j++) {
s = in.nextInt();
if(max_people < s) {
flag1 = j;//index
max_people = s;//票数
}
}
count[flag1]++;//共获得几票
}
for(int i = 0;i < 100;i++) {
if(max_city < count[i]) {
flag2 = i+1;
max_city = count[i];
}
}
System.out.println(flag2);
}
in.close();
}
}
B - Simple Game
题意
Misha and Andrew玩游戏,两人在1-n各选一个整数,随机抽取1-n中的整数c,c离谁的数更近,谁就获胜,如果一样近则Misha胜,现在我们知道n和Misha的数,请你帮助Andrew选一个数,使Andrew胜率最大。
题解
越靠中间,胜率越大
代码
import java.util.Scanner;
public class Main {
final static int MAX = (int)1e9;
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
int n,m;
while(in.hasNextInt()) {
n = in.nextInt();
m = in.nextInt();
if(n == 1)
System.out.println(1);
else if(n % 2 != 0) {
if(m < (n+1)/2)
System.out.println(m+1);
else
System.out.println(m-1);
}
else {
if(m <= n/2)
System.out.println(m+1);
else
System.out.println(m-1);
}
}
in.close();
}
}
C - Replacement
题意
每两个挨在一起的’.‘变成一个’.’ ,并且输入xi 和 ci 将x位置上替换为ci,求使字符串中没有两个连着的’.'要变化的次数
代码
#include<stdio.h>
int sum,k;
char s[300010],c;
void add(int k,int i)
{
if(s[k-1]=='.')
sum+=i;
if(s[k+1]=='.')
sum+=i;
}
int main()
{
int n,m;
while(~scanf("%d %d",&n,&m))
{
scanf("%s",s+1);
sum=0;
for(int i=1;i <= n;i++)
if(s[i]==s[i+1]&&s[i]=='.')
sum++;
for(int i=0;i<m;i++)
{
scanf("%d %c",&k,&c);
if(s[k]=='.')
{
if(c!='.')
add(k,-1);
}
else
{
if(c=='.')
add(k,1);
}
printf("%d\n",sum);
s[k]=c;
}
}
return 0;
}
D - Two Rabbits
#include<stdio.h>
int sum,k;
char s[300010],c;
void add(int k,int i)
{
if(s[k-1]=='.')
sum+=i;
if(s[k+1]=='.')
sum+=i;
}
int main()
{
int n,m;
while(~scanf("%d %d",&n,&m))
{
scanf("%s",s+1);
sum=0;
for(int i=1;i <= n;i++)
if(s[i]==s[i+1]&&s[i]=='.')
sum++;
for(int i=0;i<m;i++)
{
scanf("%d %c",&k,&c);
if(s[k]=='.')
{
if(c!='.')
add(k,-1);
}
else
{
if(c=='.')
add(k,1);
}
printf("%d\n",sum);
s[k]=c;
}
}
return 0;
}