Diff
checker
텍스트
텍스트
이미지
문서
Excel
폴더
Legal
Enterprise
데스크톱
요금제
로그인
데스크톱 앱 다운로드
텍스트 비교
두 텍스트 파일의 차이점을 찾아보세요
도구
기록
실시간 편집
변경 없는 행 숨기기
줄바꿈 비활성화
레이아웃
나란히 보기
합쳐 보기
비교 단위
스마트
단어
글자
구문 강조
언어 선택
제외
텍스트 변환
첫 변경으로
수정
Diffchecker Desktop
가장 안전하게 Diffchecker를 사용하는 방법. 데스크톱 앱을 사용하면 비교 데이터가 외부로 전송되지 않습니다!
데스크톱 앱 받기
builtin_popcount doubt
생성일
6년 전
비교 결과 만료 없음
초기화
내보내기
공유
설명
5 삭제
행
총
삭제
글자
총
삭제
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
68 행
복사
12 추가
행
총
추가
글자
총
추가
이 기능을 계속 사용하려면 업그레이드해 주세요
Diff
checker
Pro
요금제 보기
75 행
복사
#include<bits/stdc++.h>
#include<bits/stdc++.h>
#define int long long
#define int long long
#define vi vector<int>
#define vi vector<int>
#define vvi vector<vector<int>>
#define vvi vector<vector<int>>
using namespace std;
using namespace std;
int mod = 1e9+7;
int mod = 1e9+7;
vvi m;
vvi m;
int n,k;
int n,k;
void multiply(vvi &a, vvi b){
void multiply(vvi &a, vvi b){
vvi c(n,vi(n));
vvi c(n,vi(n));
for(int i = 0 ; i < n; ++i){
for(int i = 0 ; i < n; ++i){
for(int j = 0; j < n; ++j){
for(int j = 0; j < n; ++j){
c[i][j] = 0;
c[i][j] = 0;
for(int K = 0; K < n; ++K){
for(int K = 0; K < n; ++K){
c[i][j] += a[i][K] * b[K][j] % mod;
c[i][j] += a[i][K] * b[K][j] % mod;
if(c[i][j] >= mod)c[i][j]-=mod;
if(c[i][j] >= mod)c[i][j]-=mod;
}
}
}
}
}
}
for(int i = 0 ; i < n; ++i){
for(int i = 0 ; i < n; ++i){
for(int j = 0; j < n; ++j){
for(int j = 0; j < n; ++j){
a[i][j] = c[i][j];
a[i][j] = c[i][j];
}
}
}
}
}
}
void power(vvi &a, int n){
void power(vvi &a, int n){
if(n < 2)return;
if(n < 2)return;
power(a,n/2);
power(a,n/2);
multiply(a,a);
multiply(a,a);
if(n&1)multiply(a,m);
if(n&1)multiply(a,m);
}
}
void solve(){
void solve(){
cin >> n >> k;
cin >> n >> k;
m = vvi (n,vi(n));
m = vvi (n,vi(n));
vvi res(n,vi(n));
vvi res(n,vi(n));
vi arr(n);
vi arr(n);
for(auto &i: arr)cin >> i;
for(auto &i: arr)cin >> i;
if(k == 1)return void(cout << n);
if(k == 1)return void(cout << n);
for(int i = 0 ; i < n; ++i){
for(int i = 0 ; i < n; ++i){
for(int j = 0; j < n; ++j){
for(int j = 0; j < n; ++j){
복사
복사됨
복사
복사됨
if(__builtin_popcount(
arr[i]
^
arr[j]
) % 3 == 0)
m[i][j] =
1,
res[i][j] =
1
;
int val =
arr[i]
^
arr[j]
;
int cnt = 0;
while(val){
cnt+=(val&1);
val/=2;
}
m[i][j] =
(cnt % 3 == 0);
res[i][j] =
(cnt % 3 == 0)
;
}
}
}
}
power(res,k-1);
power(res,k-1);
int ans = 0;
int ans = 0;
for(int i = 0 ; i < n; ++i){
for(int i = 0 ; i < n; ++i){
for(int j = 0; j < n; ++j){
for(int j = 0; j < n; ++j){
ans+=res[i][j];
ans+=res[i][j];
if(ans >= mod)ans-=mod;
if(ans >= mod)ans-=mod;
}
}
}
}
cout << ans;
cout << ans;
}
}
signed main(){
signed main(){
ios::sync_with_stdio(false);
ios::sync_with_stdio(false);
cin.tie(0);
cin.tie(0);
cout.tie(0);
cout.tie(0);
int t = 1;
int t = 1;
// cin >> t;
// cin >> t;
while(t--)solve();
while(t--)solve();
return 0;
return 0;
}
}
저장된 비교 결과
원본
파일 열기
#include<bits/stdc++.h> #define int long long #define vi vector<int> #define vvi vector<vector<int>> using namespace std; int mod = 1e9+7; vvi m; int n,k; void multiply(vvi &a, vvi b){ vvi c(n,vi(n)); for(int i = 0 ; i < n; ++i){ for(int j = 0; j < n; ++j){ c[i][j] = 0; for(int K = 0; K < n; ++K){ c[i][j] += a[i][K] * b[K][j] % mod; if(c[i][j] >= mod)c[i][j]-=mod; } } } for(int i = 0 ; i < n; ++i){ for(int j = 0; j < n; ++j){ a[i][j] = c[i][j]; } } } void power(vvi &a, int n){ if(n < 2)return; power(a,n/2); multiply(a,a); if(n&1)multiply(a,m); } void solve(){ cin >> n >> k; m = vvi (n,vi(n)); vvi res(n,vi(n)); vi arr(n); for(auto &i: arr)cin >> i; if(k == 1)return void(cout << n); for(int i = 0 ; i < n; ++i){ for(int j = 0; j < n; ++j){ if(__builtin_popcount(arr[i]^arr[j]) % 3 == 0)m[i][j] = 1,res[i][j] = 1; } } power(res,k-1); int ans = 0; for(int i = 0 ; i < n; ++i){ for(int j = 0; j < n; ++j){ ans+=res[i][j]; if(ans >= mod)ans-=mod; } } cout << ans; } signed main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int t = 1; // cin >> t; while(t--)solve(); return 0; }
수정본
파일 열기
#include<bits/stdc++.h> #define int long long #define vi vector<int> #define vvi vector<vector<int>> using namespace std; int mod = 1e9+7; vvi m; int n,k; void multiply(vvi &a, vvi b){ vvi c(n,vi(n)); for(int i = 0 ; i < n; ++i){ for(int j = 0; j < n; ++j){ c[i][j] = 0; for(int K = 0; K < n; ++K){ c[i][j] += a[i][K] * b[K][j] % mod; if(c[i][j] >= mod)c[i][j]-=mod; } } } for(int i = 0 ; i < n; ++i){ for(int j = 0; j < n; ++j){ a[i][j] = c[i][j]; } } } void power(vvi &a, int n){ if(n < 2)return; power(a,n/2); multiply(a,a); if(n&1)multiply(a,m); } void solve(){ cin >> n >> k; m = vvi (n,vi(n)); vvi res(n,vi(n)); vi arr(n); for(auto &i: arr)cin >> i; if(k == 1)return void(cout << n); for(int i = 0 ; i < n; ++i){ for(int j = 0; j < n; ++j){ int val = arr[i] ^ arr[j]; int cnt = 0; while(val){ cnt+=(val&1); val/=2; } m[i][j] = (cnt % 3 == 0); res[i][j] = (cnt % 3 == 0); } } power(res,k-1); int ans = 0; for(int i = 0 ; i < n; ++i){ for(int j = 0; j < n; ++j){ ans+=res[i][j]; if(ans >= mod)ans-=mod; } } cout << ans; } signed main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int t = 1; // cin >> t; while(t--)solve(); return 0; }
비교하기