#include<iostream>
#include<vector>
#include<stdio.h>
using namespace std;
vector<vector<int> > rotate(const vector<vector<int> > &v);
int main(){
vector<vector<int> > vec{{1,1,1},
{2,2,2},
{3,3,3}};
// original
for (int i = 0; i < vec.size(); i++) {
for (int j = 0; j < vec[0].size(); j++) {
cout << vec[i][j];
}
cout << "\n";
}
cout << "after rotation:\n";
// print matrix after rotation
vector<vector<int> > ans = rotate(vec);
for (int i = 0; i < ans.size(); i++) {
for (int j = 0; j < ans[0].size(); j++) {
cout << ans[i][j];
}
cout << "\n";
}
return 0;
}
vector<vector<int> > rotate(const vector<vector<int> > &v) {
int n = v.size();
// create nxn matrix
vector<vector<int> > ans(n, vector<int>(n));
// copy in the values rotated
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
ans[i][j] = v[j][n - i - 1];
}
}
return ans;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHZlY3Rvcj4KI2luY2x1ZGU8c3RkaW8uaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgp2ZWN0b3I8dmVjdG9yPGludD4gPiByb3RhdGUoY29uc3QgdmVjdG9yPHZlY3RvcjxpbnQ+ID4gJnYpOwoKaW50IG1haW4oKXsKICAgIHZlY3Rvcjx2ZWN0b3I8aW50PiA+IHZlY3t7MSwxLDF9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsyLDIsMn0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgezMsMywzfX07CgogICAgLy8gb3JpZ2luYWwKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHZlYy5zaXplKCk7IGkrKykgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdmVjWzBdLnNpemUoKTsgaisrKSB7CiAgICAgICAgICAgIGNvdXQgPDwgdmVjW2ldW2pdOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8ICJcbiI7CiAgICB9CgogICAgY291dCA8PCAiYWZ0ZXIgcm90YXRpb246XG4iOwogICAgLy8gcHJpbnQgbWF0cml4IGFmdGVyIHJvdGF0aW9uCiAgICB2ZWN0b3I8dmVjdG9yPGludD4gPiBhbnMgPSByb3RhdGUodmVjKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYW5zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBhbnNbMF0uc2l6ZSgpOyBqKyspIHsKICAgICAgICAgICAgY291dCA8PCBhbnNbaV1bal07CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgIlxuIjsKICAgIH0KCiAgICByZXR1cm4gMDsKfQoKdmVjdG9yPHZlY3RvcjxpbnQ+ID4gcm90YXRlKGNvbnN0IHZlY3Rvcjx2ZWN0b3I8aW50PiA+ICZ2KSB7CglpbnQgbiA9IHYuc2l6ZSgpOwoJCgkvLyBjcmVhdGUgbnhuIG1hdHJpeAogICAgdmVjdG9yPHZlY3RvcjxpbnQ+ID4gYW5zKG4sIHZlY3RvcjxpbnQ+KG4pKTsKCQoJLy8gY29weSBpbiB0aGUgdmFsdWVzIHJvdGF0ZWQKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgbjsgaisrKSB7CiAgICAgICAgCWFuc1tpXVtqXSA9IHZbal1bbiAtIGkgLSAxXTsKICAgICAgICB9CiAgICB9CgkKICAgIHJldHVybiBhbnM7Cn0=