异或(xor)
给你n个长度为的字符串~,问你: xor xor .... xor 的二进制表示是什么
输入
第一行两个数字n,m。
接下来n行,每行一个长度为m的二进制字符串。
输出
一行一个长度为m的二进制串,表示答案。
思路
未AC:
创建一个字符串,每次输入都拆开异或.
AC:
用字符串存放输入,把每一位与数组异或
AC代码
#include<bits/stdc++.h>
using namespace std;
int a[1005];
int main(){
int n,m;
cin>> n >> m;
for(int i=0;i<n;i++){
string s;
cin>> s;
for(int j=0;j<m;j++)
{
a[j]^=(s[j]-'0');
}
}
for(int i=0;i<m;i++)
{
cout<< a[i];
}
return 0;
}
数字游戏
题目
输入:共一行,第一行一个正整数n。
输出:一行一个数,表示结果对取模的值。
思路
未AC:暴力
AC:暴力+优化
AC代码
#include <bits/stdc++.h>
using namespace std;
const int ma = 1000000007;
long long g[1000005],f[1000005];
int n;
int ksm(long long x, int b) {
long long a = 1;
while (b) {
if (b % 2 == 1)
a = a * x % ma;
b /= 2;
x = x * x % ma;
}
return a;
}
long long fq(int n) {
long long sum = 0;
while (n != 0) {
sum = sum + n % 10;
n = n / 10;
}
return sum;
}
int main() {
cin >> n;
for(int i=1;i<=n;i++)
{
f[i]=fq(i);
}
for(long long i=1;i<=n;i++)
{
for(long long j=1;i*j<=n;j++)
{
g[i*j]+=(ksm(i*j,i)*f[i])%ma;
}
}
long long sum = 0;
for(int i=1;i<=n;i++)
{
sum+=g[i];
sum%=ma;
}
cout<< sum;
return 0;
}