Hoppa till huvudinnehåll
Domarsystem

Kattis

Kattis är ett webbaserat datorprogram som automatiskt testar dina lösningar. Det används för att rätta och poängsätta de flesta av olympiadens tävlingar.

Gå till Kattis

Indata- och utdatahantering

Vi rekommenderar Kattis officiella dokumentation som steg för steg visar hur du ska skriva program som kan rättas korrekt. I korthet gäller att programmet måste läsa indata från standard input och skriva utdata till standard output.

Viktigt om utskrifter

Allting du skriver ut under programmets gång räknas som utdata. Du kan t.ex. inte låta programmet be användaren skriva in ett tal (t.ex. print("Mata in ett tal:")), eftersom Kattis tolkar din dialog som felaktig utdata och ger dig "Wrong Answer".

När du testar ditt program lokalt kan du skriva in indatan direkt med tangentbordet, eller lägga den i en fil och använda kommandot mittprogram < indatafil.txt i din terminal.

Exempel på inläsning

Indata består ofta av flera rader där varje rad innehåller flera tal eller strängar åtskilda av blanksteg (whitespace). Här visar vi hur man i fem olika språk kan läsa in följande exempelindata:

4 6
3.22 Text
Python 3
from sys import stdin

tokens = stdin.read().split()
a1 = int(tokens[0])
a2 = int(tokens[1])
d = float(tokens[2])
word = tokens[3]
C++
#include <iostream>
#include <string>
using namespace std;

int main() {
    int a1, a2;
    double d;
    string word;
    
    cin >> a1 >> a2;
    cin >> d >> word;
    return 0;
}
Java
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a1 = sc.nextInt();
        int a2 = sc.nextInt();
        double d = sc.nextDouble();
        String word = sc.next();
    }
}
C#
using System;

class Program {
    static void Main() {
        var tokens1 = Console.ReadLine().Split();
        int a1 = int.Parse(tokens1[0]);
        int a2 = int.Parse(tokens1[1]);
        
        var tokens2 = Console.ReadLine().Split();
        double d = double.Parse(tokens2[0]);
        string word = tokens2[1];
    }
}
C
#include <stdio.h>

int main() {
    int a1, a2;
    double d;
    char word[100];
    
    scanf("%d %d", &a1, &a2);
    scanf("%lf %s", &d, word);
    return 0;
}

Träningstips för Kattis

  • Tänk på att kompilatorer beter sig olika lokalt jämfört med servrarna. Vissa "slarv" som tillåts i t.ex. Visual C++ är inte tillåtet i Linux-miljöns GCC. Träna på Kattis i förväg innan tävlingen för att bekanta dig med miljön!
  • Säkerställ att du vet exakt hur man läser whitespace-separerad indata från standard input i det språk du väljer.
  • Se till att du kan deklarera och hantera 64-bitars heltal (som long long i C++ eller long i Java) för att undvika overflow på stora indatavärden.
  • Om du inte får full poäng ("Accepted") på Kattis: skriv egna små testfall lokalt för att se exakt vad som händer med olika extrema kantfall (edge-cases).