제출 #979050

#제출 시각아이디문제언어결과실행 시간메모리
979050simuyuVision Program (IOI19_vision)C++14
52 / 100
3 ms604 KiB
#include "vision.h"
#include <bits/stdc++.h>
using namespace std;


void construct_network(int H, int W, int K) {
	//vector<int> Ns;
	//Ns = {0, 1};
	//int a = add_and(Ns);






	if (max(H,W) <= 30) {

        // st1,2,3
        vector<int> st2ONs, st2INs;
        for (int mh=0; mh<H; mh++) {
            for (int mw=0; mw<W; mw++) {
                // middle is mh, mw
                // note that this is only true if (mh*W + mw) is true yea.

                // try four sides surround with K.
                st2INs.clear(); // jic

                for (int i=0; i<=K; i++) {
                    // try adding from all 4 directions
                    if ( ((0 <= mh-i) && (mh-i < H)) && ((0 <= mw-(K-i)) && (mw-(K-i) < W)) ) st2INs.push_back( (mh-i)*W + (mw-(K-i)) );
                    if ((K-i) != 0)
                        if ( ((0 <= mh-i) && (mh-i < H)) && ((0 <= mw+(K-i)) && (mw+(K-i) < W)) ) st2INs.push_back( (mh-i)*W + (mw+(K-i)) );

                    if (i!=0) {
                        if ( ((0 <= mh+i) && (mh+i < H)) && ((0 <= mw-(K-i)) && (mw-(K-i) < W)) ) st2INs.push_back( (mh+i)*W + (mw-(K-i)) );

                        if ((K-i) != 0)
                            if ( ((0 <= mh+i) && (mh+i < H)) && ((0 <= mw+(K-i)) && (mw+(K-i) < W)) ) st2INs.push_back( (mh+i)*W + (mw+(K-i)) );
                    }
                }

                if (st2INs.size() == 0) continue;

                int mor = add_or(st2INs); // either of them are yes
                int can = add_and( {mor, (mh*W + mw)} ); // and the initial condition was true also
                st2ONs.push_back(can);

                /*cout << '(' << mh << ',' << mw << "): ";
                for (int i=0; i<st2INs.size(); i++) {
                    cout << '(' << st2INs[i]/W << ',' << st2INs[i]%W << ") ";
                }
                cout << endl;*/
            }
        }
        int st2 = add_or(st2ONs); // if any of those cases were fulfilled

        return;

	} else if (min(H,W) == 1) {
	    // st5
	    vector<int> st5Ns;
	    if (H==1) {
            for (int w=0; w<W-K; w++) { // start at (0, w), end at (0, w+K)
                int can = add_and({w, w+K});
                st5Ns.push_back(can);
            }
	    } else { // W==1
	        for (int h=0; h<H-K; h++) { // start at (h, 0), end at (h+W, 0)
                int can = add_and({h*W, (h+K)*W});
                st5Ns.push_back(can);
	        }
	    }
	    int st5 = add_or(st5Ns);
	    return;

	} else {

        // st6
        vector<int> st6Ns;
        for (int i=0; i<=K; i++) {
            // i is row, K-i is column.
            if ((i>=H) || (K-i >= W)) continue; // if invalid index
            //cout << "(" << i << "," << K-i << ")" << endl;
            st6Ns.push_back( i*W + (K-i) );
        }
        int st6 = add_or(st6Ns);
        st6Ns.clear();
	}


}

컴파일 시 표준 에러 (stderr) 메시지

vision.cpp: In function 'void construct_network(int, int, int)':
vision.cpp:55:13: warning: unused variable 'st2' [-Wunused-variable]
   55 |         int st2 = add_or(st2ONs); // if any of those cases were fulfilled
      |             ^~~
vision.cpp:73:10: warning: unused variable 'st5' [-Wunused-variable]
   73 |      int st5 = add_or(st5Ns);
      |          ^~~
vision.cpp:86:13: warning: unused variable 'st6' [-Wunused-variable]
   86 |         int st6 = add_or(st6Ns);
      |             ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...