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);
}
}