• H - Hot Black Hot White(数论/取模运算)


    题目

    题意

    给定n个整数ai,定义H(ai,aj)的值为
    H(ai,aj) = concat(ai,aj) * cancat(aj,ai) + ai*aj(mod 3)
    其中concat(ai,aj)表示两个数的拼接,如concat(23,14)=2314,而concat(14,23)=1423。

    现要求将这n个数平均分成2组,使得不同组之间的任意两个元素,它们的H值取值不能为Z。Z可以自己定义,可以为0,1,或2。

    思路

    c o n c a t ( a i , a j ) = a i ∗ 1 0 k + a j concat(ai,aj) = ai * 10^k + aj concat(ai,aj)=ai10k+aj
    而由于10 % 3 == 1,所以 c o n c a t ( a i , a j ) = a i ∗ 1 0 k + a j = a i ∗ 1 k + a j = a i + a j concat(ai,aj) = ai * 10^k + aj = ai * 1^k + aj =ai+aj concat(ai,aj)=ai10k+aj=ai1k+aj=ai+aj,(mod 3)
    所以
    H ( a i , a j ) = ( a i + a j ) ∗ ( a i + a j ) + a i ∗ a j = a i 2 + a j 2 + 3 ∗ a i ∗ a j = a i 2 + a j 2 H(ai,aj)=(ai+aj)*(ai+aj) + ai*aj = ai^2+aj^2+3*ai*aj=ai^2+aj^2 H(ai,aj)=(ai+aj)(ai+aj)+aiaj=ai2+aj2+3aiaj=ai2+aj2,(mod 3)

    又因为
    0 ∗ 0 = 0 , 1 ∗ 1 = 1 , 2 ∗ 2 = 1 0*0 = 0,1*1 =1,2*2=1 00=0,11=1,22=1(mod 3)。
    统计ai^2模3为0和非0的个数,

    • 如果0的个数有一半,则取它们做为一组,此时Z取2
    • 如果非0的个数有一半,则取它们做为一组,此时Z取0

    代码

    #include
    using namespace std;
    #define ll long long
    const int maxn = 200010;
    const int mod = 1e9 + 7;
    
    
    int n, x;
    int a[maxn];
    vector<int> p[2];
    char s[maxn];
    void solve() {
    	scanf("%d", &n);
    	for (int i = 0; i < n; ++i) {
    		scanf("%d", &x);
    		x = 1LL * x * x % 3;
    		x = (x != 0);
    		p[x].push_back(i);
    	}
    	int mx = 0;
    	if (p[mx].size() < p[1].size()) {
    		mx = 1;
    	}
    	
    	for (int i = 0; i < n; ++i) {
    		s[i] = '0';
    	}
    	int z = 0;
    	if (mx == 0 && p[mx].size() >= n / 2) {
    		z = 2;
    	}
    	printf("%d\n", z);
    	for (int i = 0; i < min((int)p[mx].size(), n / 2); ++i) {
    		int &pos = p[mx][i];
    		s[pos] = '1';
    	}
    	s[n] = '\0';
    	printf("%s\n", s);
    }
    
    int main() {
    	int t;
    //	scanf("%d", &t);
    	t = 1; 
    	while (t--) {
    		solve();
    	}
    }
    /*
    
    */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    GZH

    对方正在debug

  • 相关阅读:
    Linux多线程
    论文阅读:AugGAN: Cross Domain Adaptation with GAN-based Data Augmentation
    Hydra工具的使用
    24、CSS基础——定位以及透明通道
    请求与响应:响应
    懂“女人心”的Pocket S将是华为手机的又一爆品
    小程序第三章总结
    test_sizeof
    小程序插件——开发者开发神器
    深度学习-物体检测SSD
  • 原文地址:https://blog.csdn.net/weixin_43918473/article/details/126817571