Introdução à programação competitiva · Introdução à programação competitiva Professor...
Transcript of Introdução à programação competitiva · Introdução à programação competitiva Professor...
![Page 1: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/1.jpg)
Introdução à programação competitivaProfessor Tomás O. Junco Vázquez
![Page 2: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/2.jpg)
O que é IOI?
• Olimpiada Internacional de Informática.
• Competição anual de programação orientada aestudantes de Ensino Medio que pretende motivar ointeresse na Computação.
• A primeira competição IOI aconteció em Bulgaria, noano 1989 bajo el patrocinio da UNESCO.
• É uma das 5 olimpiadas internacionais de ciências.
![Page 3: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/3.jpg)
O que é IOI?
Principais metas:
• Difundir a Ciência da Computação e a Informática noEnsino Medio.
• Proporcionar um espaço onde os estudiantes eprofessores podem intercambiar culturas,experiências e conhecimentos.
• Contribuir na formação dos estudantescompartilhando experiências e conhecimentos.
• Site oficial: www.ioinformatics.org
![Page 4: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/4.jpg)
O que é IOI?
Desenvolve-se num ciclo de quatro etapas:
1. Treinamento.
2. Competições provinciais.
3. Competição nacional.
4. Competição mundial.
![Page 5: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/5.jpg)
Motivações para participar
• Diversão, exercitar a mente e intercâmbio cultural.Programar é divertido.
• Aumenta o prestígio, visibilidade e o reconhecimentointernacional da instituição e do país.
• Participar e obter prémios nos distintos níveis dacompetição.
![Page 6: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/6.jpg)
• Em cada um dos dois dias de prova os competidoressão dados três problemas computacionais pararesolver em cinco horas.
• Se trabalha individualmente, com um computador esem ajuda externa.
• Os problemas são apresentados na língua materna.
• Os programas são testados automáticamente,sendo atribuídos pontos para o código docompetidor em função de cada caso de teste queemite a resposta certa no tempo esperado.
• Linguagens permitidas: C++, Pascal e Java.
Detalhes da competição
![Page 7: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/7.jpg)
• Para o ciclo 2017-2018 a idade máxima permitida para os participantes das competições é 20 anos no dia 1 de Julho de 2018.
• Mais detalhes em: https://ioiangola.wordpress.com/
Detalhes da competição
![Page 8: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/8.jpg)
Júris on-line
São aplicativos web desenhados para meios
geralmente académicos, que incluem problemas
de diferentes matérias para ser resolvidos
mediante técnicas de programação e, o mais
importante, avaliam automaticamente as soluçõesdadas pelos usuarios.
![Page 9: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/9.jpg)
Júris on-line para o treinamento
• http://coj.uci.cu/
• http://codeforces.com/
• http://www.usaco.org/
• https://www.codechef.com/
• https://a2oj.com/
• http://www.spoj.com/
• http://acm.timus.ru/
![Page 10: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/10.jpg)
Exemplo de problema num júri on-line
A+B ProblemTime Limit: 1000MS Memory Limit: 10000K
Description
Calculate a+b
Input
Two integer a,b (0 <= a,b <= 10)
Output
Output a+b
Sample Input
1 2
Sample Output
3
![Page 11: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/11.jpg)
Usuario dojúri on-line
Compilador Seleccionado
Componente de Execução
Componente de Julgado
SaídaEsperada
Dados de Prova
Descrição
Problema
Solução do usuario
Executável
Saída do usuario
Funcionamento dos júris on-line
![Page 12: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/12.jpg)
Tipos de veredicto
• Judging (JDG)
• Runtime Error (RTE)
• Wrong Answer (WA)
• Compilation Error (CE)
• Invalid Function (IVF)
• Time Limit Exceeded (TLE)
• Accepted (AC)
![Page 13: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/13.jpg)
Esquema geral de trabalho
Nosso programa• Algoritmos• Conhecimento de
múltiplas matérias• Técnicas de programação• Estruturas de dados• Memória• Tempo de execução
ENTRADA DOS DADOS
.in
SAÍDA DO PROGRAMA
.out
Sytem.out.println(“Entre o valor de a:”);
…
Sytem.out.println(“A soma é: ” + (a + b));
![Page 14: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/14.jpg)
Esquema geral de trabalho
• Também não é preciso verificar as condições da secção Input.
• Em caso de múltiplas entradas, também não é preciso lertodas as entradas de uma vez. Podem ser processadas pouco apouco.
• Em Java não pode incluir a linha package <nome>;
if(a >= 0 && a <= 10 && b >= 0 && b <= 10){
}
![Page 15: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/15.jpg)
❖Classe ScannerScanner in = new Scanner(System.in);
int a = in.nextInt();
❖Classe BufferedReaderBufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.valueOf(in.readLine());
A principal diferença entre estas duas formas de leitura é quanto atempo, com a classe Scanner a leitura é mais lenta.
Entrada dos datos (Java)
![Page 16: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/16.jpg)
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a = in.nextInt();
long b = in.nextLong();
double c = in.nextDouble();
float d = in.nextFloat();
String cad1 = in.next();
String line = in.nextLine();
}
}
Entrada dos datos (Java)
![Page 17: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/17.jpg)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.valueOf(in.readLine());
long b = Long.parseLong(in.readLine());
double c = Double.parseDouble(in.readLine());
float d = Float.parseFloat(in.readLine());
String cad1 = in.readLine().split(" ")[0];
String line = in.readLine();
}
}
Entrada dos datos (Java)
![Page 18: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/18.jpg)
❖função scanf()int a;
scanf("%d", &a);
❖cinint a;
cin >> a;
A principal diferença entre estas duas formas de leitura é quanto atempo, com cin a leitura é mais lenta.
Entrada dos datos (C++)
![Page 19: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/19.jpg)
#include <cstdio>
int main(){
int a;
long long b;
double c;
float d;
char cad1[100], line[200];
scanf("%d", &a);
scanf("%lld", &b);
scanf("%lf", &c);
scanf("%f", &d);
scanf("%s", cad1);
gets(line);
return 0;
}
Entrada dos datos (C++)
![Page 20: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/20.jpg)
#include <cstdio>
int main(){
int a;
long long b;
double c;
float d;
char cad1[100], line[200];
scanf("%d%lld%lf%f%s", &a, &b, &c, &d, cad1);
gets(line);
return 0;
}
Entrada dos datos (C++)
![Page 21: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/21.jpg)
#include <iostream>
using namespace std;
int main(){
int a;
long long b;
double c;
float d;
char cad1[100], line[200];
cin >> a >> b >> c >> d >> cad1;
cin.getline(line, 200);
return 0;
}
Entrada dos datos (C++)
![Page 22: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/22.jpg)
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
String cad = in.next();
//do something
}
}
}
Leitura até fim de ficheiro (Java)
![Page 23: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/23.jpg)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while(in.ready()){
String cad = in.readLine();
//do something
}
}
}
Leitura até fim de ficheiro (Java)
![Page 24: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/24.jpg)
#include <cstdio>
int main(){
int n;
while(scanf("%d", &n) != EOF){
//do something
}
return 0;
}
Leitura até fim de ficheiro (C++)
![Page 25: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/25.jpg)
#include <iostream>
using namespace std;
int main(){
int n;
while(!cin.eof()){
cin >> n;
//do something
}
return 0;
}
Leitura até fim de ficheiro (C++)
![Page 26: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/26.jpg)
❖System.out.print("ACM-ICPC 2017");
System.out.println();
❖System.out.printf("%s %d\n", "ACM-ICPC", 2017);
❖PrintWriterPrintWriter out = new PrintWriter(new BufferedOutputStream(System.out, 1 << 16), false);
out.println("ACM-ICPC 2017");
out.flush(); out.close();
A principal diferença entre estas duas formas de saída é quanto atempo, com a classe PrintWriter a saída é mais rápida.
Saída (Java)
![Page 27: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/27.jpg)
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
public class Main{
public static void main(String[] args) throws IOException {
PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out, 1 << 16), false);
out.println("ACM-ICPC 2017");
out.flush();
out.close();
}
}
Saída (Java)
![Page 28: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/28.jpg)
❖função printf()int a;
printf("%d", a);
❖coutint a;
cout << a;
A principal diferença entre estas duas formas de saída é quanto atempo, com cout a saída é mais lenta.
Saída (C++)
![Page 29: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/29.jpg)
#include <cstdio>
int main(){
int a; long long b;
double c; float d;
char cad1[100], line[200];
//ENTRADA DOS DADOS
printf("%d\n", a);
printf("%lld\n", b);
printf("%lf\n", c);
printf ("%f\n", d);
printf("%s\n", cad1);
puts(line);
return 0;
}
Saída (C++)
![Page 30: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/30.jpg)
#include <cstdio>
int main(){
int a; long long b;
double c; float d;
char cad1[100], line[200];
//ENTRADA DOS DADOS
printf("%d\n%lld\n%lf\n%f\n%s\n", a, b, c, d, cad1);
puts(line);
return 0;
}
Saída (C++)
![Page 31: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/31.jpg)
#include <iostream>
#include <cstring>
using namespace std;
int main(){
int a; long long b;
double c; float d;
char cad1[100], line[200];
//ENTRADA DOS DADOS
cout << a << endl << b << endl << c << endl << d << endl << cad1 << endl;
cout.write(line, strlen(line));
return 0;
}
Saída (C++)
![Page 32: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/32.jpg)
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Scanner;
public class Main{
public static void main(String[] args) throws IOException{
System.setIn(new FileInputStream("entrada.txt"));
System.setOut(new PrintStream(new FileOutputStream("saida.txt")));
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
System.out.println(a + b);
}
}
Ler/Escrever desde/para um ficheiro em Java
![Page 33: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/33.jpg)
#include <cstdio>
int main(){
int a, b;
freopen("entrada.txt", "r", stdin);
freopen("saida.txt", "w", stdout);
scanf("%d%d", &a, &b);
printf("%d", a + b);
return 0;
}
Ler/Escrever desde/para um ficheiro em C++
![Page 34: Introdução à programação competitiva · Introdução à programação competitiva Professor Tomás O. Junco Vázquez. O que é IOI? • Olimpiada Internacional de Informática.](https://reader033.fdocument.pub/reader033/viewer/2022052614/605e5e025abb7d0473318d33/html5/thumbnails/34.jpg)
Introdução à programação competitivaProfessor Tomás O. Junco Vázquez