日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

玲珑杯 1138 - 震惊,99%+的中国人都会算错的问题(容斥)

發布時間:2023/12/14 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 玲珑杯 1138 - 震惊,99%+的中国人都会算错的问题(容斥) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:http://www.ifrog.cc/acm/problem/1138

?

題解:這題就是簡單的容斥,但是和標準的不太一樣,這個是只加上出現奇數的。其實也是挺簡單的。

容斥原式:?? ??

只求奇數那么就要球容斥的系數如果n=2,顯然為a+b-2*a*b,n=3,a+b+c-2*a*b-2*a*c-2*b*c+4*a*b*c,n=4.....不妨設f(x)表示由x個數組合出來的數系數為多少,那么當x為奇數時f(x)=1-(f(1)*n-f(2)*n+f(3)*n-........-f(x-1)*n),當x為偶數的時候f(x)=-(f(1)*n-f(2)*n+f(3)*n-f(4)*n+.....+f(x-1)*n)這個規律是總結出來的具體畫一下圖。然后可以得到系數為2^(k - 1),

#include <iostream> #include <cstring> #include <cstdio> #include <cmath> using namespace std; typedef long long ll; ll gcd(ll a , ll b) {return (b > 0) ? gcd(b , a % b) : a; } int arr[20]; int main() {int t;scanf("%d" , &t);while(t--) {int n , m;ll ans = 0;scanf("%d%d" , &n , &m);for(int i = 0 ; i < m ; i++) scanf("%d" , &arr[i]);for(int i = 1 ; i < (1 << m) ; i++) {ll num = 0;ll lcm = 1;for(int j = 0 ; j < m ; j++) {if(i & (1 << j)) {num++;lcm = lcm/gcd(lcm , (ll)arr[j]) * (ll)arr[j];if(lcm > n) break;}}if(num % 2) ans += n / lcm * (1 << (num - 1));else ans -= n / lcm * (1 << (num - 1));}printf("%lld\n" , ans);}return 0; }

轉載于:https://www.cnblogs.com/TnT2333333/p/7116121.html

總結

以上是生活随笔為你收集整理的玲珑杯 1138 - 震惊,99%+的中国人都会算错的问题(容斥)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。