A题
#include<iostream>
#include<string.h>
#include<cmath>
#include<vector>
#include<algorithm>
#include<stack>
#include <utility>
using namespace std;
int f[105][105], k[105][105];
int main()
{
int n, m, i, j, h, w;
cin >> n >> m;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
cin >> f[i][j];
}
}
cin >> h >> w;
for(int i = 0; i < h; i++)
{
for(int j = 0; j < w; j++)
{
cin >> k[i][j];
}
}
int sum = 0;
for(int i = 0; i < n - h + 1; i++)
{
for(int j = 0; j < m - w + 1; j++)
{
sum = 0;
for(int p = 0; p < h; p++)
{
for(int q = 0; q < w; q++)
{
sum += f[p + i][q + j] * k[p][q];
}
}
if(j == 0)cout << sum ;
else cout << " " << sum;
}
cout << endl;
}
return 0;
}
C. 皇后问题
第一个点很好想,就顺着从左往右走完第一行,从右往左走完第二行,接着往下就好了
第二个点只需要先特殊地把第一行走完,然后走到(2,1)的位置,接下来情况就回到了第一个点
第三个点同第二个点
懂得第二、三个点后,第四个点也很好想,将棋盘分为上下两部分,上面那部分就是第一个点,下面那部分就是第二个点
#include<iostream>
#include<string.h>
#include<cmath>
#include<vector>
#include<algorithm>
#include<stack>
#include <utility>
using namespace std;
void ff(int n, int m)
{
int f = 0, first = 1;
for(int i = 1 ; i <= n; i++)
{
if( f== 0)
{
for(int j = 1; j <= m; j++)
{
if(!first)cout<<i<<" "<<j<<endl;
first = 0;
}
f = 1;
}
else
{
for(int j = m; j >= 1; j--)
{
if(!first)cout<<i<<" "<<j<<endl;
first = 0;
}
f = 0;
}
}
}
int main()
{
int n, m, x, y;
cin >> n >> m >> x >> y;
int first = 1, f = 0;
if(x == 1 && y == 1)
{
ff(n, m);
}
else if(x == 1 && y != 1)
{
for(int i = y + 1; i <= m; i++) cout<< 1 << " " << i << endl;
for(int i = y - 1; i > 0; i--) cout << 1 << " " << i << endl;
if(n == 1)return 0;
f = 0;
for(int i = 2 ; i <= n; i++)
{
if( f== 0)
{
for(int j = 1; j <= m; j++) cout<<i<<" "<<j<<endl;
f = 1;
}
else
{
for(int j = m; j >= 1; j--)cout<<i<<" "<<j<<endl;
f = 0;
}
}
}
else if(x != 1 && y == 1)
{
for(int i = x + 1; i <= n; i++) cout<< i << " " << 1 << endl;
for(int i = x - 1; i > 0; i--) cout << i << " " << 1 << endl;
if(m == 1)return 0;
f = 0;
for(int i = 1 ; i <= n; i++)
{
if( f== 0)
{
for(int j = 2; j <= m; j++) cout<<i<<" "<<j<<endl;
f = 1;
}
else
{
for(int j = m; j >= 2; j--)cout<<i<<" "<<j<<endl;
f = 0;
}
}
}
else
{
for(int i = y + 1; i <= m; i++) cout<< x << " " << i << endl;
for(int i = y - 1; i > 0; i--) cout << x << " " << i << endl;
if(n == 1)return 0;
f = 0;
for(int i = x + 1; i <= n; i++)
{
if( f== 0)
{
for(int j = 1; j <= m; j++) cout<<i<<" "<<j<<endl;
f = 1;
}
else
{
for(int j = m; j >= 1; j--)cout<<i<<" "<<j<<endl;
f = 0;
}
}
for(int i = 1; i <= x - 1; i++)
{
if( f== 0)
{
for(int j = 1; j <= m; j++) cout<<i<<" "<<j<<endl;
f = 1;
}
else
{
for(int j = m; j >= 1; j--)cout<<i<<" "<<j<<endl;
f = 0;
}
}
}
return 0;
}