https://vjudge.net/contest/555003#problem/G
题目要求:必须做k次操作,然后判断能否让图变为中心对称图形?就是靠对称。
对称最主要的的公式:(i,j)->(n+1-i,n+1-j)
通过遍历,先算需要操作的次数:
如果需要的操作小于等于k:
1.n为奇数,将全部次数放在最中间那个,无论如何,都可以实现中心对称;
2.n为偶则剩余操作必须为偶数
大于k一定不行
#include <iostream>
#include <algorithm>
using namespace std;
long long a[1005][1005];
void solve()
{
long long n,k;
cin>>n>>k;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
long long sum=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(a[i][j]!=a[n+1-i][n+1-j])sum++;
}
}
if(sum/2<=k)
{
if(n&1) cout<<"YES"<<endl;
else if((k-sum/2)&1) cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
else cout<<"NO"<<endl;
}
int main()
{
int t;
cin>>t;
while(t--)
{
solve();
}
}
项目:
完成了主界面的编写,同时实现了老师创建课程,班级的添加
思路:
查询数据库中所有的班级信息,将每个班级信息封装成一个 MenuItem 对象,并将其添加到 Menu 控件中。
在创建 MenuItem 时,可以将班级名作为标签(text),同时为该菜单项绑定一个事件处理器
//数据库对应操作
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT class_name FROM classes");
while (rs.next()) {
String className = rs.getString("class_name");
//在服务端进行封装返回给客户端,客户端添加班级
Menu classMenu = new Menu("班级");
menuBar.getMenus().add(classMenu);
MenuItem classItem = new MenuItem(className);
classItem.setOnAction(e -> {
//其他业务处理
});
classMenu.getItems().add(classItem);