CSP 2019-9

1.小明种苹果

#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
#define ll long long

ll n,m,t=0,k,p,tp;
int main(){
	cin>>n>>m;
	for(int i=0;i<n;i++){
		ll now,sum=0;
		cin>>now;
		for(int j=0;j<m;j++){
			cin>>tp;
			sum+=tp;
		}
		if(-sum>p){
			k=i;
			p=-sum;
		}
		t+=now+sum;
	}
	cout<<t<<" "<<k+1<<" "<<p;
}

2.小明种苹果(plus)
用一个数组来记录是否掉落,先统计T,全部苹果树遍历完再来该数组,得到另外两个结果

#include<iostream>
#include<vector>
#include<cstring>
using namespace std;

#define N 1010
#define ll long long
ll  n,m,tmp,t,d,e;
int vis[N];
int main(){
    memset(vis,0,sizeof(vis));
    cin>>n;

    for(int i=0;i<n;i++){
        cin>>m;
        ll tree=-1;
        while(m--){
            cin>>tmp;
            if(tmp>0){
                if(tree==-1)
                tree=tmp;
                else{
                if(tree!=tmp){
                    vis[i]=1;
                    tree=tmp;
                }   
                }
            }else{
                tree+=tmp;
            }
        }   
        t+=tree;    
    }

    for(int i=0;i<n;i++){
        d+=vis[i];
        int nxt=(i+1)%n;
        int pre=(i-1+n)%n;
        e+=(vis[i]*vis[nxt]*vis[pre]);
    }
    cout<<t<<" "<<d<<" "<<e<<endl;
}

3.字符画
先实现将字符串转化为ASSIC显示的函数 A
再实现改变背景色的函数 B
先统计出字符画一行的RGB向量 V
然后实现一个一次性解决一行RGB的函数 C
计算出每行的V, 带入C,C中调用AB,输出结果即可
这题就是一个个的小问题集合起来的大问题,小问题划分的好,解决的好,大问题就容易解决,反之亦然

#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 1010
#define ll long long

int m,n,p,q;
#define ESC 27
struct RGB{
	ll r,g,b;
	inline int de_int(char c){
	if(c>='a'&&c<='z') return c-'a'+10;
	return c-'0';	
	}
	void read(const string &s){
	r=de_int(s[1])*16+de_int(s[2]);
	g=de_int(s[3])*16+de_int(s[4]);
	b=de_int(s[5])*16+de_int(s[6]);
	}
	RGB(){}
	RGB(int rr,int gg,int bb){
		r=rr;
		g=gg;
		b=bb;
	}
	RGB(string s){
	 if(s.length()==4){
		s.insert(s.begin()+1,s[1]);
		s.insert(s.begin()+3,s[3]);
		s.insert(s.begin()+5,s[5]);
	}else {
		for(int i=0;i<5;i++)
		s+=s[1];
	}
		read(s);
	}
}img[1930][1930];
RGB t(0,0,0);

string to_str(int x){
	string res="";
	while(x){
		res+=(x%10)+'0';
		x/=10;
	}
	reverse(res.begin(),res.end());
	if(res=="") res="0";
	return res;
}

string change(const RGB &rgb){
	string res="";
	if(t.r==rgb.r&&t.g==rgb.g&&t.b==rgb.b) return res;
	res+=ESC;
	if(rgb.r==0&&rgb.g==0&&rgb.b==0){
		t.r=rgb.r;
		t.g=rgb.g;
		t.b=rgb.b;	
		return res+"[0m";
	}
	t.r=rgb.r;
	t.g=rgb.g;
	t.b=rgb.b;	
	res+="[48;2;";
	return res+to_str(t.r)+";"+to_str(t.g)+";"+to_str(t.b)+"m";
}

string get(char c){
	string res="";
	int f=c/16;
	if(f>=10) res+=(f-10)+'A';
	else res+=f+'0';
	f=c%16;
	if(f>=10) res+=(f-10)+'A';
	else res+=f+'0';
	return "\\x"+res;
}

string trans(const string &s){
	string res="";
	for(int i=0;i<s.length();i++){
		res+=get(s[i]);
	}
	return res;
}

void solve_line(vector<RGB> &v){
	for(int i=0;i<v.size();i++){
		cout<<trans(change(v[i])+" ");
	}
	cout<<trans(change(RGB(0,0,0))+"\n");
}

int main(){
	cin>>m>>n>>p>>q;
	vector<RGB> v;
	int r=n/q,c=m/p;
	for(int i=0;i<n;i++)
	for(int j=0;j<m;j++)
	{
		string s;
		cin>>s;
		img[i][j]=RGB(s);
	}
	for(int i=0;i<r;i++){
		v.clear();
		for(int j=0;j<c;j++){
		RGB temp(0,0,0);
		for(int k=0;k<q;k++)
			for(int l=0;l<p;l++){
				temp.r+=img[i*q+k][j*p+l].r;
				temp.g+=img[i*q+k][j*p+l].g;
				temp.b+=img[i*q+k][j*p+l].b;
			}
			temp.r/=(p*q);
			temp.g/=(p*q);
			temp.b/=(p*q);
		v.push_back(temp);
		}
		solve_line(v);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值