Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <sstream>
- #include <iomanip>
- #include <string>
- #include <algorithm>
- #include <cmath>
- #include <time.h>
- #include <vector>
- #include <stack>
- #include <queue>
- #include <set>
- #include <map>
- #include <cstdio>
- #include <assert.h>
- #include <cstdlib>
- #include <cstring>
- using namespace std;
- typedef long long ll;
- typedef double db;
- typedef string str;
- #define forn(i, n) for (int i = 0; i < n; ++i)
- #define INF 1e+9
- #define EPS 1e-9
- #define PI 3.1415926535897932384626433832795
- #define mp(a, b) make_pair(a, b)
- #define pb(a) push_back(a)
- #define pii pair<int, int>
- #define pdd pair<db, db>
- #define sz(a) ( (int) a.size() )
- #define len(a) ( (int) a.length() )
- #define ms(x) memset(x, 0, sizeof(x))
- #define ms1(x) memset(x, -1, sizeof(x))
- #define L(a) sz(a)
- #define X first
- #define Y second
- #define ALL(a) a.begin(), a.end()
- int mat[310][40];
- int was[40];
- double I[40];
- int col[40];
- int R[40];
- vector<string> rev;
- int main(){
- #ifdef _DEBUG
- freopen("input.txt", "r", stdin);
- //freopen("output.txt", "w", stdout);
- #else
- freopen("ideal.in", "r", stdin);
- freopen("ideal.out", "w", stdout);
- #endif
- string a;
- int Teams = 0;
- int Tasks = 0;
- while(getline(cin,a)){
- rev.pb(a);
- }
- int start = 0;
- for(int i = L(rev)-1;i>=0;i--){
- bool isother = false;
- a = rev[i];
- for(int j = 0;j < L(a);j++){
- if(a[j]!='-' && a[j]!=' ')
- isother = true;
- }
- if(!isother && L(a)>0){
- start = i + 1;
- break;
- }
- }
- int tem = start-2;
- int raz = 0;
- bool tw = false;
- rev[tem]+=' ';
- char must = 'A';
- string cc = "";
- for(int i = 0;i < L(rev[tem]);i++){
- if(rev[tem][i]!=' '){
- cc+=rev[tem][i];
- }
- if(rev[tem][i]==' '){
- if(L(cc)==1 && cc[0]==must){
- must++;
- Tasks++;
- }
- cc = "";
- }
- }
- while(start < L(rev)){
- a = rev[start++];
- int cur = Tasks-1;
- bool was = false;
- for(int j = L(a)-1;j>=0 && cur>=0;j--){
- if(a[j]=='+'){
- mat[Teams][cur] = 1;
- cur--;
- was = true;
- }
- if(a[j]=='.' || a[j]=='-'){
- cur--;
- was = true;
- }
- }
- reverse(ALL(a));
- int rr = 0;
- string tt = "";
- for(int i = 0;i < L(a);i++){
- if(a[i]>='0' && a[i]<='9'){
- tt+=a[i];
- }else
- break;
- }
- reverse(ALL(tt));
- for(int i = 0;i < L(tt);i++){
- rr*=10;
- rr+=tt[i]-'0';
- }
- R[Teams] = rr;
- Teams++;
- }
- double V = 0,O = 0,E = 0,U = 0,N = 0;
- int n = Teams;
- int m = Tasks;
- int mxx = 0;
- int mnn = INF;
- ms1(was);
- for(int i = n-1;i>=0;i--){
- int cur = 0;
- for(int j = 0;j < m;j++){
- cur+=mat[i][j];
- if(was[j]==-1){
- if(mat[i][j])
- was[j] = R[i];
- }else{
- if(mat[i][j]==0 && was[j]>R[i]){
- I[j]+=1.0/n;
- }
- }
- }
- col[cur] = 1;
- if(cur==Tasks)
- O+=1.0/n;
- if(cur==0)
- V+=1.0/n;
- mxx = max(mxx,cur);
- mnn = min(mnn,cur);
- }
- for(int i = mxx;i>mnn;i--){
- if(col[i]==0)
- E+=1.0/m;
- }
- double T = 0;
- for(int i = 0;i < Tasks;i++){
- T+=I[i];
- if(was[i]==-1)
- U+=1.0/m;
- }
- N = 1.03*V+3.141*O+2.171*E + 1.414*U;
- if(Tasks!=0)
- T/=Tasks;
- N+=T;
- printf("Vainness = %.5lf\n",V);
- printf("Oversimplification = %.5lf\n",O);
- printf("Evenness = %.5lf\n",E);
- printf("Unsolvability = %.5lf\n",U);
- for(int i = 0;i < m;i++){
- printf("Instability %d = %.5lf\n",i+1,I[i]);
- }
- printf("Negidealness = %.5lf\n",N);
- #ifdef _DEBUG
- cout << fixed << setprecision(15) << "\n" << clock() * 1.0 / CLOCKS_PER_SEC;
- #endif
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement