某所説明会、懇親会に参戦、codeforces #159

今日は某所の説明会に行きました。所要時間は6時間ほど。
懇親会まで終えてからゲーセンへ。
スマホだと連絡先を交換する際に、QRコードなり、赤外線なり用意をしっかりしてないと意外と面倒。

f0019846_4424632.jpg


f0019846_443289.jpg


f0019846_443538.jpg


f0019846_445215.jpg


f0019846_446251.jpg


f0019846_4464514.jpg

quaver。強め。

帰宅後はcodeforces #159に参戦。

A問題は、n個のタップ、m個のデバイス、k個の初期プラグ数があり、
n個の配列が与えられている。
m個のデバイスが繋げられるために使うタップの数を求めよ。不可能なら-1を返せ。
ソートして多いほうから順番にタップに繋げれば良い。
その際に1引くことを忘れずに。

import java.util.Arrays;
import java.util.Scanner;

public class Main2 {

public static void main(String args[]){
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int m = input.nextInt();
int k = input.nextInt();
int[] num = new int[n];
for(int i = 0 ; i < n ; i++){
num[i] = input.nextInt();
}

System.out.println(str(n,m,k,num));
}

static int str(int n,int m,int k,int[] num){
Arrays.sort(num);
int total = k;
int count = 0;
while(k < m){
if(count == num.length)return -1;
k += num[num.length-count-1]-1;
count++;
}
return count;
}

}


B問題は、青と赤のブロックがあり、これを交互においていく。
先行は隣同士が同じだと得点が、後攻は隣同士が違う色だと得点が入る。
うまくやったときの得点をそれぞれ返せ。
やり方はソースが長いのでもう忘れました。


import java.util.Arrays;
import java.util.Scanner;

public class Main2 {

public static void main(String args[]){
Scanner input = new Scanner(System.in);
int r = input.nextInt();
int b = input.nextInt();

str(r,b);
}

static void str(int r,int b){
int mr = r;
int mb = b;

StringBuilder sb = new StringBuilder();
for(int i = 0 ; i < r+b ; i++){
if(i == 0){
if(mr != 0){
sb.append("r");
mr--;
}else{
sb.append("b");
mb--;
}
}else{
if(i % 2 == 0){
if(sb.charAt(sb.length()-1) == 'r'){
if(mr != 0){
sb.append("r");
mr--;
}else{
sb.append("b");
mb--;
}
}else{
if(mb != 0){
sb.append("b");
mb--;
}else{
sb.append("r");
mr--;
}
}
}else{
if(sb.charAt(sb.length()-1) == 'r'){
if(mb != 0){
sb.append("b");
mb--;
}else{
sb.append("r");
mr--;
}
}else{
if(mr != 0){
sb.append("r");
mr--;
}else{
sb.append("b");
mb--;
}
}
}
}
}
int apetya = 0;
int avstya = 0;
for(int i = 0 ; i < sb.length()-1 ; i++){
if(sb.charAt(i) != sb.charAt(i+1)){
avstya++;
}else{
apetya++;
}
}

mr = r;
mb = b;
sb = new StringBuilder();
for(int i = 0 ; i < r+b ; i++){
if(i == 0){
if(mb != 0){
sb.append("b");
mb--;
}else{
sb.append("r");
mr--;
}
}else{
if(i % 2 == 0){
if(sb.charAt(sb.length()-1) == 'r'){
if(mr != 0){
sb.append("r");
mr--;
}else{
sb.append("b");
mb--;
}
}else{
if(mb != 0){
sb.append("b");
mb--;
}else{
sb.append("r");
mr--;
}
}
}else{
if(sb.charAt(sb.length()-1) == 'r'){
if(mb != 0){
sb.append("b");
mb--;
}else{
sb.append("r");
mr--;
}
}else{
if(mr != 0){
sb.append("r");
mr--;
}else{
sb.append("b");
mb--;
}
}
}
}
}

int bpetya = 0;
int bvstya = 0;
for(int i = 0 ; i < sb.length()-1 ; i++){
if(sb.charAt(i) != sb.charAt(i+1)){
bvstya++;
}else{
bpetya++;
}
}
if(apetya < bpetya){
System.out.println(bpetya+" "+bvstya);
}else if(apetya > bpetya){
System.out.println(apetya+" "+avstya);
}else{
System.out.println(apetya+" "+bvstya);
}
}

}


C問題は座標が複数与えられていて、それが角度いくつに収まるか答える問題。
そういえば失われしEmp CSが届いてました。これで勝つる。

  by ddrer-yossi | 2013-01-08 23:41 | codeforces | Comments(0)

<< 朝から夕方まで説明会 ぽっぴっぽーExtremeフルコン。 >>

SEM SKIN - DESIGN by SEM EXE