結果
| 問題 |
No.1946 ロッカーの問題
|
| コンテスト | |
| ユーザー |
shinchan
|
| 提出日時 | 2022-05-20 21:59:46 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 516 ms / 3,000 ms |
| コード長 | 1,270 bytes |
| コンパイル時間 | 1,967 ms |
| コンパイル使用メモリ | 201,172 KB |
| 最終ジャッジ日時 | 2025-01-29 10:36:34 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 19 |
ソースコード
#include <bits/stdc++.h>
#define be(v) (v).begin(),(v).end()
#define pb(q) push_back(q)
#define rep(i, n) for(int i=0;i<n;i++)
#define all(i, v) for(auto& i : v)
typedef long long ll;
using namespace std;
const ll mod=1000000007, INF=(1LL<<60);
#define doublecout(a) cout<<fixed<<setprecision(10)<<a<<endl;
vector<int> divisor(int n) {
vector<int> v;
for(int i = 1; i * i <= n ; i ++) {
if(n % i == 0) {
if(n != i * i ) v.pb(n / i);
v.pb(i);
}
}
return v;
}
int main() {
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
int n, m;
cin >> n >> m;
vector<int> a(n + 1, 0);
for(int i = 1; i <= n ; i++) {
all(e, divisor(i)) a[e] ^= 1;
}
set<int> s;
int b;
rep(i, m) {
cin >> b;
s.insert(b);
}
vector<int> c(n + 1, 0);
for(int i = 1;i <= n ; i++) {
c[i] = a[i] ^ s.count(i);
// cout << i << " " << a[i] << " " << s.count(i) << " " << c[i] << endl;
// if(c[i]) cout << i << endl;
}
int cnt = 0;
for(int i = n ; i >= 1; i --) {
if(c[i]) {
cnt++;
all(e, divisor(i)) {
c[e] ^= 1;
}
}
}
cout << cnt << endl;
return 0;
}
shinchan