CSES - Datatähti 2024 alku - Results
Submission details
Task:Säähavainnot
Sender:a256
Submission time:2023-10-30 20:55:36 +0200
Language:C++ (C++20)
Status:READY
Result:0
Feedback
groupverdictscore
#1ACCEPTED0
Test results
testverdicttimescore
#1ACCEPTED0.01 s0details
#2ACCEPTED0.01 s0details
#3ACCEPTED0.01 s0details
#4ACCEPTED0.01 s0details
#5ACCEPTED0.01 s0details
#6ACCEPTED0.01 s0details
#7ACCEPTED0.01 s0details
#8ACCEPTED0.01 s0details

Code

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define N 10123
#define NN 2000
#define EI (-1e5)

int n;
double T[N][24],dt[N][24],E[N][12],S[12],avg[12],END[N];

double mittaus[8000][24],oikea[8000][24];

void luedata(){
	ifstream in;
	in.open("sample_data.txt");

	int Nn;
	in>>Nn;
	for(int i=0;i<8000;++i){
		for(int h=0;h<24;++h) in>>mittaus[i][h];
		for(int h=0;h<12;++h) in>>oikea[i][h];
	}

	in.close();
}

void ennusta(int i){
	double mabs=100,mval=100,minval=100,maxval=-100,avg=0,dtsum=0,dtabsum=0;
	for(int h=0;h<23;++h){
		dt[i][h]=T[i][h+1]-T[i][h];
		dtsum+=dt[i][h];
		dtabsum+=abs(dt[i][h]);
	}
	END[i]=7;

	for(int h=0;h<24;++h){
		if(abs(T[i][h])<mabs){
			mabs=abs(T[i][h]);
			mval=T[i][h];
		}
		minval=min(minval,T[i][h]);
		maxval=max(maxval,T[i][h]);
		avg+=T[i][h];
	}
	avg/=24;

	if(maxval-minval<3.2){
		END[i]=12;
	} else if(maxval-minval<6){
		END[i]=9;
	}

	if(maxval-minval>9){
		END[i]=5;
	}

	double ts=T[i][23];//,deltat=dt[i][0];

	int e=4;
	for(int h=0;h<e;++h){
		E[i][h]=ts;
	}

	double k=(ts-mval)/(e-1-12);

	for(int h=e;h<12;++h){
		ts+=k;

		//ts+=deltat;
		//deltat=kk(ts,deltat,h);

		E[i][h]=ts;
		//E[i][h]=(1.5*ts+0.5*T[i][h]+0.5*avg)/2.5;
		//E[i][h]=avg;
		S[h]+=E[i][h];
	}
}

void solve(){
	for(int i=0;i<n;++i){
		ennusta(i);
	}
}

void simulaatio(){
	luedata();
	n=8000;
	for(int i=0;i<n;++i){
		for(int h=0;h<24;++h){
			T[i][h]=mittaus[i][h];
		}
	}
	solve();
	double s=0;
	for(int i=0;i<n;++i){
		int a=0,b=0;
		for(int h=0;h<END[i];++h){
			double d=abs(E[i][h]-oikea[i][h]);
			if(d<0.75){
				++a;
			} else if(d>=2.05){
				++b;
			}
		}
		s+=min(25*max(a-b,0),100);
	}
	s/=n;
	cout<<s<<'\n';
}

void prosentti(){
	luedata();
	n=1000;
	double p=0;
	ofstream out;
	out.open("weather_output");
	for(int i=0;i<n;++i){
		for(int h=0;h<24;++h){
			T[i][h]=mittaus[i][h];
		}
	}
	for(int i=0;i<n;++i){
		ennusta(i);
		int a=0,b=0;
		for(int h=0;h<END[i];++h){
			double d=abs(E[i][h]-oikea[i][h]);
			if(d<0.75){
				++a;
			} else if(d>=2.05){
				++b;
			}
		}
		p+=max(0,a-b);

		if(a-b<3){
			for(int h=0;h<24;++h) out<<mittaus[i][h]<<' ';
			for(int h=0;h<12;++h) out<<oikea[i][h]<<' ';
			out<<'\n';

			for(int h=0;h<12;++h) out<<E[i][h]<<' ';
			out<<'\n';
		}
	}

	out.close();
	cerr<<p/(12*n)<<'\n';
}

void ratkaisu(){
	cin>>n;
	for(int i=0;i<n;++i){
		for(int h=0;h<24;++h) cin>>T[i][h];
	}

	solve();

	for(int i=0;i<n;++i){
		int e=END[i];
		for(int h=0;h<12;++h){
			printf("%.1f ",E[i][h]);
		}
		for(int h=e;h<12;++h){
			printf("? ");
		}
	}
	puts("");

}

int main(){
	//srand(time(NULL));
	cin.tie(0)->sync_with_stdio(0);
	ratkaisu();
	//prosentti();
	//simulaatio();
}

Test details

Test 1

Verdict: ACCEPTED

input
1000
-0.4 -0.1 -0.2 -0.3 -0.4 -0.5 ...

correct output
0.4 0.4 0.5 0.8 0.9 1.1 1.3 1....

user output
0.2 0.2 0.2 0.2 0.2 0.1 0.1 0....
Truncated

Test 2

Verdict: ACCEPTED

input
1000
2.9 2.9 2.9 2.1 2.6 2 2 2.2 2....

correct output
2.3 1.6 1.5 1.1 1 0.7 0.6 0.8 ...

user output
2.6 2.6 2.6 2.6 2.5 2.4 2.4 2....
Truncated

Test 3

Verdict: ACCEPTED

input
1000
6.6 6 6.4 6 4.6 4.6 4.2 4.3 4....

correct output
10 10.9 10.3 10.1 9.1 7.3 5.7 ...

user output
10.1 10.1 10.1 10.1 9.2 8.3 7....
Truncated

Test 4

Verdict: ACCEPTED

input
1000
19.4 20.2 19.1 18.9 18.3 17.3 ...

correct output
18 18.2 17 17.5 17.2 16.2 12 8...

user output
17.2 17.2 17.2 17.2 16.4 15.7 ...
Truncated

Test 5

Verdict: ACCEPTED

input
1000
-5.7 -5.8 -5.8 -5.9 -7.1 -6.9 ...

correct output
-4.2 -4.1 -4 -3.8 -3.5 -3.2 -3...

user output
-4.5 -4.5 -4.5 -4.5 -4.5 -4.5 ...
Truncated

Test 6

Verdict: ACCEPTED

input
1000
14.8 14.8 15.4 12.9 11.8 9.7 9...

correct output
11.8 11 11.6 10.8 10.4 10.4 10...

user output
12.6 12.6 12.6 12.6 12.0 11.4 ...
Truncated

Test 7

Verdict: ACCEPTED

input
1000
0.7 1 2 1.4 0.6 -0.4 -0.9 -0.7...

correct output
-1.3 -0.5 -0.6 -1 -3.2 -7.2 -6...

user output
-1.8 -1.8 -1.8 -1.8 -1.6 -1.4 ...
Truncated

Test 8

Verdict: ACCEPTED

input
1000
15.1 15.3 14.9 14.4 14.4 13.7 ...

correct output
15.6 15.9 16 15.2 14.6 14.4 13...

user output
15.0 15.0 15.0 15.0 14.5 14.0 ...
Truncated