Codeforces Round #238 (Div. 2)

C. Unusual Product

http://codeforces.com/problemset/problem/405/C

对一个矩阵操作 输入1 后面接着的这个数是改变的行号 输入2 后面接着的这个数是改变的列号 输入3 输出矩阵计算的结果

改变就是将整行或列 的每个数^1(取反)  计算就是求行乘列的和 如:

1 1 1

0 1 1    =   (1·1 + 1·0 + 1·1) + (0·1 + 1·1 + 1·0) + (1·1 + 0·1 + 0·0) = 0 + 1 + 1 = 0               模上2

1 0 0 

            =   (a11*a11+a12*a21+a13*a31)+(a21*a12+a22*a22+a23*a32)+(a31*a13+a32*a23+a33*a33)             数字表示双下标 ij

观察发现某一行(列) 的每个位置都会计算2次 除了i==j时

那么我们改变某一行(列)  矩阵值必然改变一次 因为mod 2 计算2次等于没有改变 然后aij (a==j)会取反

难以表述...

#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>

using namespace std;

typedef long long LL;

int a[1005][1005];
int n;
int c=0;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            scanf("%d",&a[i][j]);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(a[i][j]&&a[j][i])
                c++;
        }
        c%=2;
    }
    int m;
    scanf("%d",&m);
    while(m--)
    {
        int k;
        scanf("%d",&k);
        if(k==3)
              printf("%d",c);
        else
        {
            int v;
            scanf("%d",&v);
            c^=1;
        }
    }
    printf("\n");
//    system("pause");
    return 0;
}

D. Toy Sum

给一个集合X 求在0-100w内集合Y(X,Y没有公共子集) 满足

s规定为100w

输出一个满足条件的集合y

设N=1000000

对于每个数x我们可以找到对应的y=N-(x-1) 并标记

但是有种情况是y=N-(x-1) 已经是集合X的数了

如 X为 2 999999

N-(2-1)=999999

我们必须要满足X,Y没有公共子集

其实这种情况只会出现在x+y=N+1

那么我只要再找2个数a+b=N+1=x+y 并且a,b(b=N+1-a)未被标记

遍历即可

#include<cstdio>
#include<vector>

using namespace std;

#define N 1000000

vector<int> mm;

bool Hash[N+5];

int a[N+5];

int main()
{
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		Hash[a[i]]=1;
	}
	int f=n;
	for(int i=1;i<=n;i++)
	{
		if(Hash[N-(a[i]-1)]==0)
		{
			Hash[N-(a[i]-1)]=1;
			mm.push_back(N-(a[i]-1));
			f--;
		}
	}
	int i=1;
	while(f>0)
	{
		if(Hash[i]==0&&Hash[N-i+1]==0)
		{
			Hash[i]=1;
			Hash[N-i+1]=1;
			mm.push_back(i);
			mm.push_back(N-i+1);
			f-=2;
		}
		i++;
	}
	printf("%d\n",mm.size());
	for(int i=0;i<mm.size();i++)
	{
		if(i==mm.size()-1)
			printf("%d\n",mm[i]);
		else
			printf("%d ",mm[i]);
	}
	//system("pause");
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值