# Coding-frenzy CC-26 Reference code
---
### CC-2601A
```cpp
#include<iostream>
using namespace std;
class Point{public:
double m_x,m_y;
Point(double x=0,double y=0):m_x(x),m_y(y){}//使用預設值,可代表0~2個參數的建構子
Point operator-(Point b){return Point(m_x-b.m_x,m_y-b.m_y);}
};
istream& operator>>(istream &is,Point &a){return is>>a.m_x>>a.m_y;}
class Rectangle {
public :
Point r_x,r_y;
int height() {return abs((r_x-r_y).m_y);}
int width () {return abs((r_x-r_y).m_x);}
};
istream& operator >> (istream &is,Rectangle &a){return is>>a.r_x>>a.r_y;}
ostream& operator << (ostream &os,Rectangle a){return os<<a.width()<<' '<<a.height();}
int main(){
int n;cin>>n;
while(n--){
Rectangle rec;cin>>rec;
cout<<rec<<endl;
}
return 0;
}
```
### CC-2601B
```cpp
#include<iostream>
using namespace std;
class Fraction{public:
int x,y;
Fraction(int a=0,int b=0):x(a),y(b){}
Fraction operator-(Fraction b){return Fraction(abs(x*b.y-y*b.x),y*b.y);}
};
istream& operator>>(istream &is,Fraction &a){char c;return is>>a.x>>c>>a.y;}
ostream& operator<<(ostream &os,Fraction a){return os<<a.x<<"/"<<a.y;}
class Section{public:
Fraction s_x,s_y;
Fraction len() {return (s_x-s_y);}
};
istream& operator>>(istream &is,Section &a){
return is>>a.s_x>>a.s_y;
}
ostream& operator<<(ostream &os,Section a){
return os<<a.len();
}
int main(){
int n;cin>>n;
while(n--){
Section sec;cin>>sec;
cout<<sec.s_x<<' '<<sec.s_y<<' ';
cout<<sec<<endl;
}
return 0;
}
```
### CC-2602A
```cpp
#include<iostream>
#include<vector>
#include<numeric>
using namespace std;
class Point{public:
double m_x,m_y;
Point(double x=0,double y=0){m_x=x;m_y=y;}
Point operator+(Point b){return Point(m_x+b.m_x,m_y+b.m_y);}
Point operator/(int n) {return Point(m_x/n,m_y/n) ;}
};
istream& operator>>(istream &is,Point&a){return is>>a.m_x>>a.m_y;}
ostream& operator<<(ostream &os,Point&a){return os<<"("<<a.m_x<<","<<a.m_y<<")";}
class PVec{public:
vector<Point> m_pts;//成員物件
PVec (int n):m_pts(n){};
Point sum() {return accumulate(m_pts.begin(),m_pts.end(),Point() );}
Point avg() {return sum()/m_pts.size();}
};
istream& operator >> (istream &is,PVec&a) {
for (int i=0; i<a.m_pts.size(); i++)
is >> a.m_pts[i];
return is;
}
ostream& operator << (ostream &os,PVec&a) {
return os << "sum:" << a.sum() << endl
<< "avg:" << a.avg() << endl;
}
int main(){
int n;cin>>n;
PVec pts(n);
cin>>pts;
cout<<pts;
return 0;
}
```
### CC-2602B
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Frac{public:
__int64 m_n,m_d;
Frac(__int64 n=0,__int64 d=1):m_n(n),m_d(d){
m_n /= __gcd(n,d);
m_d /= __gcd(n,d);
}
Frac operator+ (Frac b) {return Frac(m_n*b.m_d+b.m_n*m_d,m_d*b.m_d);}
Frac operator* (Frac b) {return Frac(m_n*b.m_n,m_d*b.m_d);}
Frac operator/ (int n) {return Frac(m_n,m_d*n);}
};
istream& operator >>(istream &is,Frac &a){
char c;
return is>>a.m_n>>c>>a.m_d;
}
ostream& operator <<(ostream &os,Frac a){return os<<a.m_n<<"/"<<a.m_d;}
class FVec{public:
vector<Frac> m_vs;
FVec() {};
FVec(int n):m_vs(n){};
Frac sum() {
Frac tmp;
for(int i=0; i<m_vs.size(); i++) tmp = tmp + m_vs[i];
return tmp;
}
Frac pro() {
Frac tmp(1,1);
for(int i=0; i<m_vs.size(); i++) tmp = tmp * m_vs[i];
return tmp;
}
Frac avg() {return sum() / m_vs.size();}
};
istream& operator >>(istream &is,FVec &vs){
for (int i=0; i<vs.m_vs.size(); i++) is >> vs.m_vs[i];
return is;
}
int main(){
int n; cin >> n;
FVec a(n); cin >> a;
cout<<a.sum()<<endl<<a.pro()<<endl<<a.avg()<<endl;
return 0;
}
```
### CC-2603A
```cpp
#include<iostream>
#include<vector>
#include<numeric>
using namespace std;
class Point{
double m_x,m_y;
public:
Point(double x=0,double y=0):m_x(x),m_y(y){}
Point operator+(Point b){return Point(m_x+b.m_x,m_y+b.m_y);}
Point operator/(double b){return Point(m_x/b,m_y/b);}
double& getter_x() {return m_x;}
double& getter_y() {return m_y;}
};
istream& operator>>(istream &is,Point&a){
return is >> a.getter_x() >> a.getter_y();
}
ostream& operator<<(ostream &os,Point&a){
return os << '(' << a.getter_x() << ',' << a.getter_y() << ')';
}
class PVec{
vector<Point> m_pts;
public:
PVec(int n):m_pts(n){}
int size() {return m_pts.size();}
Point& operator[] (int k) {return m_pts[k];}
Point sum(){return accumulate(m_pts.begin(),m_pts.end(),Point());}
Point avg(){return sum()/m_pts.size();}
};
istream& operator>>(istream &is,PVec&a){
for(int k=0;k<a.size();k++)is>>a[k];
return is;
}
ostream& operator<<(ostream &os,PVec&a){
return os<<"sum:"<<a.sum()<<endl<<"avg:"<<a.avg()<<endl;
}
int main(){
int n;cin>>n;
PVec pts(n);
cin>>pts;
cout<<pts<<endl;
return 0;
}
```
### CC-2603B
```cpp
#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
using namespace std;
class Fraction{public:
int x,y;
Fraction(int a=0,int b=1):x(a),y(b){
x /= __gcd(a,b);
y /= __gcd(a,b);
}
Fraction operator +( Fraction b){
return Fraction(x*b.y+y*b.x,y*b.y);
}
Fraction operator *( Fraction b){
return Fraction(x*b.x,y*b.y);
}
Fraction operator /(int b){
return Fraction(x,y*b);
}
};
istream& operator>>(istream &is,Fraction &a){char c;return is>>a.x>>c>>a.y;}
ostream& operator<<(ostream &os,const Fraction &a){return os<<a.x<<"/"<<a.y;}
class FVec{
vector<Fraction>fv;
public:
FVec() {};
FVec(int n):fv(n) {};
FVec getsize(int n) {FVec a(n); return a;}
int size() {return fv.size();}
Fraction& operator[] (int i) {return fv[i];}
Fraction sum() {
return accumulate(fv.begin(),fv.end(),Fraction() );
}
Fraction pro() {
Fraction b(1,1);
for (int i=0; i<fv.size(); i++) b = b * fv[i];
return b;
}
Fraction avg() {
return sum() / fv.size();
}
};
istream& operator>>(istream &xis,FVec &a){
int n; cin >> n; a = a.getsize(n);
for (int i=0; i<a.size(); i++) xis >> a[i];
return xis;
}
int main(){
FVec a;cin>>a;
cout<<a.sum()<<endl<<a.pro()<<endl<<a.avg()<<endl;
return 0;
}
```
### CC-2604A
```cpp
#include<iostream>
#include<vector>
#include<numeric>
using namespace std;
class Point{
double m_x,m_y;
public:
Point(double x=0,double y=0):m_x(x),m_y(y){}
Point operator+(Point b){return Point(m_x+b.m_x,m_y+b.m_y);}
Point operator/(double b){return Point(m_x/b,m_y/b);}
friend istream& operator >>(istream &is,Point &a);
friend ostream& operator <<(ostream &is,Point &a);
};
istream& operator >>(istream &is,Point &a){return is>>a.m_x>>a.m_y;}
ostream& operator <<(ostream &os,Point &a){
return os<<"("<<a.m_x<<","<<a.m_y<<")";
}
class PVec{
vector<Point> m_pts;
public:
PVec(int n):m_pts(n){}
Point sum(){return accumulate(m_pts.begin(),m_pts.end(),Point());}
Point avg(){return sum()/m_pts.size();}
friend istream& operator>>(istream &is,PVec&a);
};
istream& operator>>(istream &is,PVec&a){
for(int k=0;k<a.m_pts.size();k++) is>>a.m_pts[k];
return is;
}
ostream& operator<<(ostream &os,PVec a){
return os<<"sum:"<<a.sum()<<endl<<"avg:"<<a.avg()<<endl;
}
int main(){
int n;cin>>n;
PVec pts(n);
cin>>pts;
cout<<pts;
return 0;
}
```
### CC-2604B
```cpp
#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
using namespace std;
class Fraction{
int x,y;
public:
Fraction(int a=0,int b=1):x(a),y(b){
x /= __gcd(a,b);
y /= __gcd(a,b);
}
Fraction operator +( Fraction b){
return Fraction(x*b.y+y*b.x,y*b.y);
}
Fraction operator *( Fraction b){
return Fraction(x*b.x,y*b.y);
}
Fraction operator /(int b){
return Fraction(x,y*b);
}
friend istream& operator>>(istream &is,Fraction &a);
friend ostream& operator<<(ostream &os,Fraction a);
};
istream& operator>>(istream &is,Fraction &a){char c;return is>>a.x>>c>>a.y;}
ostream& operator<<(ostream &os,Fraction a){return os<<a.x<<"/"<<a.y;}
class FVec{
vector<Fraction>fv;
public:
FVec() {};
FVec(int n):fv(n) {};
friend istream& operator>>(istream &xin,FVec &a);
Fraction sum() {
return accumulate(fv.begin(),fv.end(),Fraction() );
}
Fraction pro() {
Fraction b(1,1);
for (auto &n : fv) b = b * n;
return b;
}
Fraction avg() {
return sum() / fv.size();
}
};
istream& operator>>(istream &xin,FVec &a){
int n; cin >> n; a = FVec(n);
for (int i=0; i<a.fv.size(); i++) cin >> a.fv[i];
return xin;
}
int main(){
FVec a;cin>>a;
cout<<a.sum()<<endl<<a.pro()<<endl<<a.avg()<<endl;
return 0;
}
```
### CC-2605A
```cpp
#include<iostream>
#include<vector>
#include<numeric>
using namespace std;
class Point{
double m_x,m_y,m_z;
public:
Point(double x=0,double y=0):m_x(x),m_y(y){}
Point operator+(const Point& b) const{
return Point(m_x+b.m_x,m_y+b.m_y);
}
Point operator/(double b) const{return Point(m_x/b,m_y/b);}//why can no const
friend istream& operator>>(istream &is,Point&a);
friend ostream& operator<<(ostream &os,const Point&a);
};
istream& operator>>(istream &is,Point&a){return is>>a.m_x>>a.m_y;}
ostream& operator<<(ostream &os,const Point&a){
return os<<"("<<a.m_x<<","<<a.m_y<<")";
}
class PVec{
vector<Point> m_pts;
public:
PVec(int n):m_pts(n){}
Point sum() const{
return accumulate(m_pts.begin(),m_pts.end(),Point());
}
Point avg() const{return sum()/m_pts.size();}
friend istream& operator>>(istream &,PVec&);
friend ostream& operator<<(ostream &,const PVec&);
};
istream& operator>>(istream &is,PVec&a){
for(int k=0;k<a.m_pts.size();k++)cin>>a.m_pts[k];
return is;
}
ostream& operator<<(ostream &os,const PVec &a){
return os<<"sum:"<<a.sum()<<endl<<"avg:"<<a.avg()<<endl;
}
int main(){
int n;cin>>n;
PVec pts(n);
cin>>pts;
cout<<pts;
return 0;
}
```
### CC-2605B
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Fraction{
int x,y;
public:
Fraction(int a=0,int b=1):x(a),y(b){
x /= __gcd(a,b); y /= __gcd(a,b);
}
Fraction operator +(const Fraction& b)const{
return Fraction(x*b.y+y*b.x,y*b.y);
}
Fraction operator *(const Fraction& b)const{
return Fraction(x*b.x,y*b.y);
}
Fraction operator /(int b)const{
return Fraction(x,y*b);
}
friend istream& operator >>(istream& is,Fraction& a);
friend ostream& operator <<(ostream& is,const Fraction& a);
};
istream& operator >>(istream& is,Fraction& a) {
char c;
return is >> a.x >> c >> a.y;
}
ostream& operator <<(ostream& os,const Fraction& a) {
return os << a.x << '/' << a.y;
}
class FVec{
vector<Fraction>fv;
public:
FVec() {}
FVec(int n):fv(n) {}
Fraction tol()const{
Fraction ans=fv[0];
for(int i=1;i<fv.size();i++){
ans=ans+fv[i];
}
return ans;
}
Fraction cross()const{
Fraction ans=fv[0];
for(int i=1;i<fv.size();i++){
ans=ans*fv[i];
}
return ans;
}
Fraction avg()const{
return tol()/fv.size();
}
friend istream& operator >>(istream& is,FVec& a);
};
istream& operator >>(istream& is,FVec& a) {
int n; is >> n; a = FVec(n);
for (int i=0; i<a.fv.size(); i++) is >> a.fv[i];
return is;
}
ostream& operator <<(ostream& os,const FVec& a) {
return os << a.tol() << endl << a.cross() << endl << a.avg() << endl;
}
int main(){
FVec a;cin>>a;
cout<<a;
return 0;
}
```
### CC-2606A
```cpp
#include<iostream>
#include<vector>
#include<numeric>
using namespace std;
class Point{
double m_x,m_y;
public:
Point(double x=0,double y=0):m_x(x),m_y(y){}
Point operator+(const Point b)const{return Point(m_x+b.m_x, m_y+b.m_y);}
Point operator/(double b)const{return Point(m_x/b,m_y/b);}
friend istream& operator>>(istream &is,Point&a);
friend ostream& operator<<(ostream &os,const Point&a);
};
istream& operator>>(istream &is,Point&a){return is>>a.m_x>>a.m_y;}
ostream& operator<<(ostream &os,const Point&a){
return os<<"("<<a.m_x<<","<<a.m_y<<")";
}
class PVec:vector<Point>{
public:
PVec(int n):vector<Point>(n) {}
Point sum() const{return accumulate(begin(),end(),Point() );}
Point avg() const{return sum() / size();}
friend istream& operator>>(istream &,PVec&);
friend ostream& operator<<(ostream &,const PVec&);
};
istream& operator>>(istream &is,PVec&a){
for(int k=0;k<a.size();k++)cin>>a[k];
return is;
}
ostream& operator<<(ostream &os,const PVec &a){
return os<<"sum:"<<a.sum()<<endl<<"avg:"<<a.avg()<<endl;
}
int main(){
int n;cin>>n;
PVec pts(n);
cin>>pts;
cout<<pts;
return 0;
}
```
### CC-2606B
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Frac{public:
int m_x,m_y;
Frac(int n=0,int d=1):m_x(n),m_y(d){
int gcd = __gcd(n,d); if(gcd<0) gcd *= -1;
m_x /= gcd; m_y /= gcd;
}
Frac operator+(const Frac& b) const{
return Frac(m_x*b.m_y+b.m_x*m_y,m_y*b.m_y);
}
Frac operator-(const Frac& b) const{
return Frac(m_x*b.m_y-b.m_x*m_y,m_y*b.m_y);
}
Frac operator*(const Frac& b) const{return Frac(m_x*b.m_x,m_y*b.m_y);}
Frac operator/(const Frac& b) const{return Frac(m_x*b.m_y,m_y*b.m_x);}
};
istream& operator>>(istream &xin,Frac &a){
char c;
return xin >> a.m_x >> c >> a.m_y;
}
ostream& operator<<(ostream &xout,const Frac &a){
return xout << a.m_x << '/' << a.m_y;
}
int main(){
Frac a,b;
cin>>a>>b;
cout<<a+b<<endl;
cout<<a-b<<endl;
cout<<a*b<<endl;
cout<<a/b<<endl;
return 0;
}
```
### CC-2607A
```cpp
#include<iostream>
#include<vector>
#include<numeric>
using namespace std;
class Point{
double m_x,m_y;
static int pop;
public:
Point (double a=0,double b=0):m_x(a),m_y(b) {pop++;}
Point (const Point& b):m_x(b.m_x),m_y(b.m_y) {pop++;}
~Point() {pop--;}
static int Population() {return pop;}
Point operator+(const Point& b)const{return Point(m_x+b.m_x,m_y+b.m_y);}
Point operator/(double b)const{return Point(m_x/b,m_y/b);}
friend istream& operator>>(istream &is,Point &a);
friend ostream& operator<<(ostream &os,const Point&a);
};
int Point::pop;
istream& operator>>(istream &is,Point&a){return is>>a.m_x>>a.m_y;}
ostream& operator<<(ostream &os,const Point&a){
return os<<"("<<a.m_x<<","<<a.m_y<<")";
}
class PVec:public vector<Point>{
public:
PVec(int n):vector<Point>(n){}
Point sum()const{return accumulate(begin(),end(),Point() );}
Point avg()const{return sum()/size();}
};
istream& operator>>(istream &is,PVec&a){
for(int k=0;k<a.size();k++)is>>a[k];
return is;
}
ostream& operator<<(ostream &os,const PVec &a){
return os<<"sum:"<<a.sum()<<endl<<"avg:"<<a.avg()<<endl;
}
int main(){
{
int n;cin>>n;
PVec pts(n);cin>>pts;
cout<<pts<<endl;
cout<<Point::Population()<<endl;
}
cout<<Point::Population()<<endl;
return 0;
}
```
### CC-2607B
```cpp
#include<iostream>
#include<vector>
#include<numeric>
using namespace std;
class Score{
double m_x,m_y;
static int s_popu;//靜態成員變數
public:
static int Population() {return s_popu;}
~Score(){s_popu--;}
Score(const Score &b):m_x(b.m_x),m_y(b.m_y){s_popu++;}
Score(double x=0,double y=1):m_x(x),m_y(y){s_popu++;}
Score operator+(const Score& b)const{
double ia=m_x*b.m_y+b.m_x*m_y;
double ib=m_y*b.m_y;
return Score(ia,1);
}
Score operator-(const Score& b)const{
double ia=m_x*b.m_y-b.m_x*m_y;
double ib=m_y*b.m_y;
return Score(ia,ib);
}
Score operator*(const Score& b)const{return Score(m_x*b.m_x,m_y*b.m_y);}
Score operator/(const Score& b)const{return Score(m_x*b.m_y,m_y*b.m_x);}
friend istream& operator>>(istream &is,Score &a);
friend ostream& operator<<(ostream &os,const Score&a);
};
int Score::s_popu;//靜態成員變數安排空間
istream& operator>>(istream &is,Score&a){return is>>a.m_x>>a.m_y;}
ostream& operator<<(ostream &os,const Score&a){
return os<<a.m_x<<"/"<<a.m_y;
}
class FVec:public vector<Score>{
public:
FVec(int n):vector<Score>(n){}
Score sum()const{return accumulate(begin(),end(),Score());}
Score avg()const{return sum()/size();}
};
istream& operator>>(istream &is,FVec&a){
for(int k=0;k<a.size();k++)is>>a[k];
return is;
}
ostream& operator<<(ostream &os,const FVec &a){
return os<<"sum:"<<a.sum()<<endl<<"avg:"<<a.avg()<<endl;
}
int main(){
{
int n;cin>>n;
FVec pts(n);cin>>pts;
cout<<pts<<endl;
cout<<Score::Population()<<endl;
}
cout<<Score::Population()<<endl;
return 0;
}
```
### CC-2608A
```cpp
#include <iostream>
#include <vector>
#include <numeric>
#include <cmath>
using namespace std;
class Point{
double m_x,m_y;
public:
Point(double x=0,double y=0):m_x(x),m_y(y){}
Point operator+(const Point& b)const{return Point(m_x+b.m_x,m_y+b.m_y);}
Point operator/(double b)const{ return Point(m_x/b,m_y/b);}
operator double()const{return sqrt(m_x*m_x+m_y*m_y);}
friend istream& operator>>(istream &is,Point&a);
friend ostream& operator<<(ostream &os,const Point&a);
};
istream& operator>>(istream &is,Point&a){return is>>a.m_x>>a.m_y;}
ostream& operator<<(ostream &os,const Point&a){
return os<<"("<<a.m_x<<","<<a.m_y<<")";
}
class PVec:public vector<Point>,public Point {
public:
PVec(int n):vector<Point>(n){}
Point sum()const{
return accumulate(begin(),end(),Point() );
}
Point avg()const{
Point G = sum() / size() ;
(*(Point*)this) = G; // this先轉乘Point*型態 再取地址的值(變成Point)
return G;
}
operator double()const{
double ans=0;
for(int i=0; i<size(); i++) ans += (*this)[i]; // (*this) == pts
return ans;
}
friend istream& operator>>(istream &,PVec&);
friend ostream& operator<<(ostream &,const PVec&);
};
istream& operator>>(istream &is,PVec&a){
for(int k=0;k<a.size();k++)is>>a[k];
return is;
}
ostream& operator<<(ostream &os,const PVec &a){
return os<<"sum:"<<a.sum()<<endl
<<"avg:"<<a.avg()<<endl;
}
int main(){
int n;cin>>n;
PVec pts(n);cin>>pts;
cout<<pts<<endl;//第一型 PVec
Point G=pts;cout<<G<<endl;//第二型 Point
cout<<pts.size()<<endl;//第三型 vector<Point>
cout<<(double)pts<<endl;//第三型 轉型為 double
return 0;
}
```
### CC-2608B
```cpp
#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
using namespace std;
class Frac{public:
__int64 m_n,m_d;
Frac(__int64 n=0,__int64 d=1):m_n(n),m_d(d) {
int gcd = __gcd(n,d); if(gcd<0) gcd *= -1;
m_n /= gcd; m_d /= gcd;
}
void operator+=(const Frac& b){m_n=m_n*b.m_d+m_d*b.m_n;m_d*=b.m_d;}
void operator*=(const Frac& b){m_n=m_n*b.m_n;m_d*=b.m_d;}
Frac operator/(int b)const{return Frac(m_n,m_d*b);}
};
istream& operator>>(istream &is,Frac &a){
char c;
return is>>a.m_n>>c>>a.m_d;
}
ostream& operator<<(ostream &os,const Frac &a){return os<<a.m_n<<"/"<<a.m_d;}
class FVec:public vector<Frac>{
vector <Frac> m_vs;
public:
Frac sum() const{
Frac b;
for (auto &n : m_vs) b += n;
return Frac(b.m_n,b.m_d);
}
Frac pro() const{
Frac b(1,1);
for (auto &n : m_vs) b *= n;
return Frac(b.m_n,b.m_d);
}
Frac avg() const{
return sum() / m_vs.size();
}
friend istream& operator>>(istream &is,FVec &vs);
};
istream& operator >>(istream &is,FVec &vs){
int n;is>>n;Frac v;
while(n--){is>>v;vs.m_vs.push_back(v);}
return is;
}
int main(){
FVec a;cin>>a;
cout<<a.sum()<<endl<<a.pro()<<endl<<a.avg()<<endl;
return 0;
}
```
### CC-2609A
```cpp
#include<iostream>
using namespace std;
class Matrix {
int ma,mb,mc,md;
public:
Matrix() {}
Matrix(int a, int b, int c, int d):ma(a),mb(b),mc(c),md(d) {}
Matrix operator+ (const Matrix& b) const{
return Matrix(ma+b.ma, mb+b.mb, mc+b.mc, md+b.md);
}
Matrix operator- (const Matrix& b) const{
return Matrix(ma-b.ma, mb-b.mb, mc-b.mc, md-b.md);
}
Matrix operator* (const Matrix& b) const{
return Matrix( ma*b.ma + mb*b.mc,
ma*b.mb + mb*b.md,
mc*b.ma + md*b.mc,
mc*b.mb + md*b.md
);
}
friend istream& operator >>(istream& is,Matrix& mt);
friend ostream& operator <<(ostream& os,const Matrix& m);
};
istream& operator >>(istream& is,Matrix& m) {
return is >> m.ma >> m.mb >> m.mc >> m.md;
}
ostream& operator <<(ostream& os,const Matrix& m) {
return os<<' '<<m.ma<<' '<<m.mb<<endl<<' '<<m.mc<<' '<<m.md<<endl;
}
int main(){
Matrix a,b;cin>>a>>b;
cout<<"a:"<<endl<<a<<endl;
cout<<"b:"<<endl<<b<<endl;
cout<<"a+b:"<<endl<<a+b<<endl;
cout<<"a-b:"<<endl<<a-b<<endl;
cout<<"a*b:"<<endl<<a*b<<endl;
return 0;
}
```
### CC-2609B
```cpp=
#include <iostream>
using namespace std;
class matrix{
int *data;
int mn;
public:
matrix(int n) {mn=n; data=new int[n*n];}
matrix operator +(matrix m){
matrix a(mn);
for(int i=0;i<mn*mn;i++) {
a.data[i] = data[i] + m.data[i] ;
}
return a;
}
matrix operator -(matrix m){
matrix a(mn);
for(int i=0;i<mn*mn;i++) {
a.data[i] = data[i] - m.data[i];
}
return a;
}
matrix operator *(matrix m){
matrix a(mn);
for (int i=0; i<mn*mn; i++) a.data[i]=0;
for(int i=0;i<mn;i++) {
for(int j=0; j<mn; j++) {
for(int k=0; k<mn; k++) {
a.data[i*mn+j] += data[i*mn+k]*m.data[mn*k+j];
}
}
}
return a;
}
friend istream &operator>>(istream &is,matrix &c);
friend ostream& operator<<(ostream& os,const matrix& c);
};
istream &operator>>(istream &is,matrix &c){
for(int i=0;i<c.mn*c.mn;i++)is>>c.data[i];
return is;
}
ostream& operator<<(ostream& os,const matrix& c){
for(int i=0;i<c.mn*c.mn;i++){
if(i!=0 &&i%c.mn==0)os<<endl;
os<<c.data[i]<<" ";
}
os<<endl;
return os;
}
int main(){
int n; cin>>n;
matrix a(n);
matrix b(n);
cin>>a>>b;
cout<<a+b<<endl;
cout<<a-b<<endl;
cout<<a*b<<endl;
}
```
### CC-2610A
```cpp
#include <iostream>
#include <cmath>
using namespace std;
class Point{
double m_x,m_y;
public:
Point(double x=0,double y=0):m_x(x),m_y(y){}
Point operator+(const Point b)const{return Point(m_x+b.m_x,m_y+b.m_y);}
Point operator*(double b)const{return Point(m_x*b,m_y*b);}
Point operator/(double b)const{return operator*(1/b);}
Point operator-(const Point &a)const{return operator+(a*(-1.));}
operator double()const{return sqrt(m_x*m_x+m_y*m_y);}
friend istream& operator>>(istream &is,Point&a);
friend ostream& operator<<(ostream &os,const Point&a);
};
istream& operator>>(istream &is,Point&a){return is>>a.m_x>>a.m_y;}
ostream& operator<<(ostream &os,const Point&a){
return os<<"("<<a.m_x<<","<<a.m_y<<")";
}
class Triangle {
Point A,B,C;
public:
Triangle() {}
Point G() const{return (A+B+C) / 3;}
Point I() const{
double a = B-C; double b = C-A; double c = B-A;
return (A*a+B*b+C*c) / (a+b+c);
}
friend istream& operator >>(istream& is, Triangle& t);
friend ostream& operator <<(ostream& os, const Triangle& t);
};
istream& operator >>(istream& is, Triangle& t) {
return is >> t.A >> t.B >> t.C;
}
ostream& operator <<(ostream& os, const Triangle& t) {
return os << "G:" << t.G() << endl << "I:" << t.I() ;
}
int main(){
Triangle tri;cin>>tri;
cout<<tri<<endl;
return 0;
}
```
### CC-2610B (no code)
**本題爆炸不寫(\*゚∀゚\*)**
### CC-26D01
```cpp=
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
class Complex{public:
double x,y;
Complex(double a=0,double b=0):x(a),y(b){}
Complex operator+(const Complex& p)const{return Complex(x+p.x,y+p.y);}
Complex operator*(const Complex& p)const{return Complex(x*p.x-y*p.y,y*p.x+x*p.y);}
Complex operator /(double b){return Complex(x/b,y/b);}
};
istream &operator>>(istream &is,Complex &c){
char c1,c2;
is>>c.x>>c1>>c.y>>c2;
if(c1=='-')c.y*=-1;
return is;
}
ostream& operator<<(ostream& os,const Complex& c){
if(c.y==0)os<<c.x;
else if(c.x==0)os<<c.y<<"i";
else if(c.y<0) os<<c.x<<c.y<<"i";
else os<<c.x<<"+"<<c.y<<"i";
return os;
}
class CVec:public vector<Complex>,public Complex{
public:
//CVec(int n):vector<Complex>(n) {}
Complex tol() const{
Complex b;
for(auto &n : (*this) )
b = b + n;
return b;
}
Complex cross() const{
Complex b = (*this)[0];
for(int i=1; i<size(); i++)
b = b * (*this)[i];
return b;
}
Complex avg() const{
return tol() / size();
}
friend istream& operator>>(istream &is,CVec &a);
};
istream& operator>>(istream &is,CVec &a){
Complex b; cin >> b;
a.push_back(b);
return is ;
}
int main(){
int n;cin>>n;
CVec c;
while(n--){
cin>>c;
}
cout<<"sum:"<<c.tol()<<endl;
cout<<"Cross product:"<<c.cross()<<endl;
cout<<"avg:"<<c.avg()<<endl;
return 0;
}
```
### CC-26D02
```cpp=
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
class Complex{public:
double x,y;
Complex(double a=0,double b=0):x(a),y(b){}
Complex operator+(const Complex& p)const{return Complex(x+p.x,y+p.y);}
Complex operator*(const Complex& p)const{return Complex(x*p.x-y*p.y,y*p.x+x*p.y);}
Complex operator /(double b){return Complex(x/b,y/b);}
};
istream &operator>>(istream &is,Complex &c){
char c1,c2;
is>>c.x>>c1>>c.y>>c2;
if(c1=='-')c.y*=-1;
return is;
}
ostream& operator<<(ostream& os,const Complex& c){
if(c.y==0)os<<c.x;
else if(c.x==0)os<<c.y<<"i";
else if(c.y<0) os<<c.x<<c.y<<"i";
else os<<c.x<<"+"<<c.y<<"i";
return os;
}
class CVec{
vector<Complex>cv;
public:
void input(Complex &c) {
cv.push_back(c);
}
Complex tol() const{
Complex ans=cv[0];
for(int i=1;i<cv.size();i++){
ans=ans+cv[i];
}
return ans;
}
Complex cross() const{
Complex ans=cv[0];
for(int i=1;i<cv.size();i++){
ans=ans*cv[i];
}
return ans;
}
Complex avg() const{
return tol()/cv.size();
}
};
istream& operator>>(istream &is,CVec &a){
Complex c;
is>>c;
a.input(c);
return is;
}
ostream& operator<<(ostream &os,const CVec&a){
return os << "sum:" << a.tol() <<endl
<< "Cross product:"<< a.cross() <<endl
<< "avg:" << a.avg() <<endl;
}
int main(){
int n;cin>>n;
CVec c;
while(n--){
cin>>c;
}
cout<<c<<endl;
return 0;
}
```
### CC-26D03
```cpp=
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
class Complex{public:
double x,y;
Complex(double a=0,double b=0):x(a),y(b){}
Complex operator+(Complex& p){return Complex(x+p.x,y+p.y);}
Complex operator*(Complex& p){return Complex(x*p.x-y*p.y,y*p.x+x*p.y);}
Complex operator /(double b){return Complex(x/b,y/b);}
};
istream &operator>>(istream &is,Complex &c){
char c1,c2;
is>>c.x>>c1>>c.y>>c2;
if(c1=='-')c.y*=-1;
return is;
}
ostream& operator<<(ostream& os,const Complex& c){
if(c.y==0)os<<c.x;
else if(c.x==0)os<<c.y<<"i";
else if(c.y<0) os<<c.x<<c.y<<"i";
else os<<c.x<<"+"<<c.y<<"i";
return os;
}
class CVec{
vector<Complex>cv;
public:
Complex tol(){
Complex ans=cv[0];
for(int i=1;i<cv.size();i++){
ans=ans+cv[i];
}
return ans;
}
Complex cross(){
Complex ans=cv[0];
for(int i=1;i<cv.size();i++){
ans=ans*cv[i];
}
return ans;
}
Complex avg(){
return tol()/cv.size();
}
friend istream& operator>>(istream &is,CVec &a);
};
istream& operator>>(istream &is,CVec &a){
Complex c;
is>>c;
a.cv.push_back(c);
return is;
}
int main(){
int n;cin>>n;
CVec c;
while(n--){
cin>>c;
}
cout<<"sum:"<<c.tol()<<endl;
cout<<"Cross product:"<<c.cross()<<endl;
cout<<"avg:"<<c.avg()<<endl;
return 0;
}
```
### CC-26D04
```cpp=
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
class Complex{
double x,y;
public:
Complex(double a=0,double b=0):x(a),y(b){}
Complex operator+(Complex p){return Complex(x+p.x,y+p.y);}
Complex operator*(Complex p){return Complex(x*p.x-y*p.y,y*p.x+x*p.y);}
Complex operator /(double b){return Complex(x/b,y/b);}
friend istream &operator>>(istream &is,Complex &c);
friend ostream& operator<<(ostream& os,const Complex& c);
};
istream &operator>>(istream &is,Complex &c){
char c1,c2;
is>>c.x>>c1>>c.y>>c2;
if(c1=='-')c.y*=-1;
return is;
}
ostream& operator<<(ostream& os,const Complex& c){
if(c.y==0)os<<c.x;
else if(c.x==0)os<<c.y<<"i";
else if(c.y<0) os<<c.x<<c.y<<"i";
else os<<c.x<<"+"<<c.y<<"i";
return os;
}
class CVec{
vector<Complex>cv;
public:
Complex tol() const{
Complex ans=cv[0];
for(int i=1;i<cv.size();i++){
ans=ans+cv[i];
}
return ans;
}
Complex cross()const{
Complex ans=cv[0];
for(int i=1;i<cv.size();i++){
ans=ans*cv[i];
}
return ans;
}
Complex avg() const{
return tol()/cv.size();
}
friend istream& operator>>(istream &is,CVec &a);
friend ostream& operator<<(ostream &os,const CVec&a);
};
istream& operator>>(istream &is,CVec &a){
Complex c;
is>>c;
a.cv.push_back(c);
return is;
}
ostream& operator<<(ostream &os,const CVec&a){
os<<"sum:"<<a.tol()<<endl;
os<<"Cross product:"<<a.cross()<<endl;
os<<"avg:"<<a.avg()<<endl;
return os;
}
int main(){
int n;cin>>n;
CVec c;
while(n--){
cin>>c;
}
cout<<c<<endl;
return 0;
}
```
### CC-26D05
```cpp=
#include <iostream>
#include <cmath>
using namespace std;
class Complex{public:
double x,y;
Complex(double a=0,double b=0):x(a),y(b){}
Complex operator-(Complex b){return Complex(abs(x-b.x),y-b.y);}
operator double() {return sqrt(x*x+y*y);}
};
istream &operator>>(istream &is,Complex &c){
char c1,c2;
is>>c.x>>c1>>c.y>>c2;
if(c1=='-')c.y*=-1;
return is;
}
ostream& operator<<(ostream &os,const Complex &a){return os<<a.x<<"/"<<a.y;}
class Arrow{
Complex x,y;
public:
double len() {return x - y;}
friend istream& operator>>(istream &is,Arrow &a);
};
istream& operator>>(istream &is,Arrow &a){
return is >> a.x >> a.y;
}
int main(){
int n;cin>>n;
while(n--){
Arrow ar;cin>>ar;
cout<<ar.len()<<endl;
}
return 0;
}
```