思路:
n为偶数的适合,需要剩余偶数次操作,n为奇数的时候,需要剩余奇数次操作。
得出规律为:交换的点坐标相加为阶数+1;(i,j)->(n+1-i,n+1-j);
坐标从0开始,则为坐标相差为阶数-1;(i,j)->(n-1-i,n-1-j);
遍历矩阵。不一样则次数-1,使得矩阵颜色一样。最后若次数<0则NO,次数>=0则对阶数和剩余次数展开讨论。
#include<iostream>
#include<cstring>
using namespace std;
int a[1005][1005];
int main(){
int t;
cin>>t;
while(t--)
{
int n,k;
cin>>n>>k;
memset(a,0,sizeof(a));
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>a[i][j];
}
}
if(n==1)
{
cout<<"YES"<<endl;
continue;
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(a[i][j]==a[n-1-i][n-1-j])continue;
a[i][j]=a[n-1-i][n-1-j];
k--;
}
}
if(k>=0)
{
if(n%2!=0)cout<<"YES"<<endl;
else //偶数
{
if(k%2==0)cout<<"YES"<<endl;//偶数YES
else cout<<"NO"<<endl;//奇数NO
}
}else cout<<"NO"<<endl;
}
}
思路:
把a数组中比a数组尾大的全部放到b,把b数组中比b数组尾大的放到a,得到的最终数组判断尾部是不是最大即可,先遍历一遍没变化的数组,若尾部已经是最大的,标记一下,输出YES。
#include<iostream>
using namespace std;
int a[1000];
int b[1000];
int main(){
int t;
cin>>t;
while(t--)
{
int n,maxa=0,maxb=0;
cin>>n;
int flag=0;
for(int i=0;i<n;i++)
{
cin>>a[i];if(a[i]>maxa)maxa=a[i];
}
for(int i=0;i<n;i++)
{
cin>>b[i];if(b[i]>maxb)maxb=b[i];
}
if((maxa==a[n-1]&&maxb==b[n-1]))
{
flag=1;
}
for(int i=0;i<n;i++)
{
if(a[i]>a[n-1]||b[i]>b[n-1])
{
int tmp;
tmp=a[i];
a[i]=b[i];
b[i]=tmp;
}
}
maxa=0;
maxb=0;
for(int i=0;i<n;i++)
{
if(a[i]>maxa)maxa=a[i];
}
for(int i=0;i<n;i++)
{
if(b[i]>maxb)maxb=b[i];
}
if((maxa==a[n-1]&&maxb==b[n-1]))
{
flag=1;
}
if(flag==1)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
项目:
终于解决了程序无响应的bug
用户和课程之间的多对多的表建立完成,dao包中添加课程,创建课程,主界面的完善。用户资料界面。