$9.5$ 短学期题解
\(a\)
一个简单的坐标转换,原来的 \(a[i][j]\) 会变为 \(b[j][n-i+1]\)
int b[N][N];
void solve(){
int n=read(),m=read();
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
b[j][n-i+1]=read();
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<b[i][j]<<' ';
}
cout<<'\n';
}
//puts(ans>0?"YES":"NO");
//puts(ans>0?"Yes":"No");
}
\(b\)
判闰年+月份年份的进位
int md[20]={0,31,28,31,30,31,30,31,31,30,31,30,31};
void solve(){
int y,m,d;
while(cin>>y>>m>>d){
for(int i=1;i<=10000;i++){
int runnian=0;
if((y%4==0&&y%100!=0)||y%400==0)runnian=1;
d++;
int mth=md[m];
if(m==2&&runnian)mth++;
if(d>mth)d=1,m++;
if(m>12)y++,m=1;
}
cout<<y<<'-'<<m<<"-"<<d<<'\n';
}
//puts(ans>0?"YES":"NO");
//puts(ans>0?"Yes":"No");
}
\(c\)
去年的 \(c\) 语言课程题目,我这里暴力枚举了 \(5000\) 次,如果溢出了就把最后一次多滴的去掉。
void solve(){
int vul,d;
while(cin>>vul>>d){
int sum=0,pause=0;
for(int i=1;i<=5000;i++){
sum+=i;
if(sum*d>=vul){
int more=(sum*d-vul)/d;
pause-=more;
break;
}
pause++;
}
cout<<sum+pause<<'\n';
}
//puts(ans>0?"YES":"NO");
//puts(ans>0?"Yes":"No");
}
\(d\)
首先每年的牛一定可以继承上一年的数量(因为牛不会死),然后再加上三年前的牛的数量(因为他们会生)。
int f[N];
void solve(){
int n=read();
f[1]=1;
for(int i=2;i<=n;i++){
f[i]=f[i-1];
if(i-3>=0)f[i]+=f[i-3];
}
cout<<f[n]<<'\n';
//puts(ans>0?"YES":"NO");
//puts(ans>0?"Yes":"No");
}
\(e\)
简单加法
void solve(){
int n=read();
int g=0,s=0,b=0;
for(int i=1;i<=n;i++){
int x=read(),y=read(),z=read();
g+=x;
s+=y;
b+=z;
}
cout<<g<<" "<<s<<" "<<b<<" "<<g+s+b<<'\n';
//puts(ans>0?"YES":"NO");
//puts(ans>0?"Yes":"No");
}
\(f\)
使用邻接矩阵存图,然后 \(dfs\) 暴力枚举。
int lj[N][N],vis[N],a[N],n;
int ans=0;
void dfs(int now,int w){
ans=max(ans,w);
for(int i=1;i<=n;i++){
if(!vis[i]&&lj[now][i]){
vis[i]=1;
dfs(i,w+a[i]);
vis[i]=0;
}
}
}
void solve(){
n=read();
for(int i=1;i<=n;i++){
a[i]=read();
}
for(int i=1;i<=n-1;i++){
for(int j=i+1;j<=n;j++){
int x=read();
lj[i][j]=x;
lj[j][i]=x;
}
}
for(int i=1;i<=n;i++){
vis[i]=1;
dfs(i,a[i]);
vis[i]=0;
}
cout<<ans<<'\n';
//puts(ans>0?"YES":"NO");
//puts(ans>0?"Yes":"No");
}