山東省第四屆ACM大學生程式設計競賽-Alice and Bob(二進位制&&找規律)
Alice and Bob
Time Limit: 1000MS Memory limit: 65536K
題目描述
Alice and Bob like playing games very much.Today, they introduce a new game.
There is a polynomial like this: (a0*x^(2^0)+1) * (a1 * x^(2^1)+1)*.......*(an-1 * x^(2^(n-1))+1). Then Alice ask Bob Q questions. In the expansion of the Polynomial, Given an integer P, please tell the coefficient of the x^P.
Can you help Bob answer these questions?
輸入
For each case, the first line contains a number n, then n numbers a0, a1, .... an-1 followed in the next line. In the third line is a number Q, and then following Q numbers P.
1 <= T <= 20
1 <= n <= 50
0 <= ai <= 100
Q <= 1000
0 <= P <= 1234567898765432
輸出
示例輸入
1 2 2 1 2 3 4
示例輸出
2 0
提示
來源
題目意思:
給定(a0*x^(2^0)+1) * (a1 * x^(2^1)+1)*.......*(an-1 * x^(2^(n-1))+1)
這個式子的係數a,展開這個式子後,求x^q的係數。
解題思路:
(a0*x^(2^0)+1) * (a1 * x^(2^1)+1)*.......*(an-1 * x^(2^(n-1))+1)
展開看看:
當n=0:
1+a0*x^20
當n=1:
1+ a0 *a1*x^20*x^21+a1*x^21+a0*x^20
當n=2:
1+ a0 *a1*a2*x^20*x^21*x^22+a2*x^22+a1*x^21+a0*x^20+a2*a1*x^22*x^21+a1*a0*x^21 *x^20+ a2*a0*x^22*x^20
………………
所以展開式中不存在可以合併同類項的情況,直接藉助係數a就可以運算。
先看下面這張表(q在題目中是x的指數):
q 二進位制 x的指數
1 1 (20)
2 10 (21)
3 11 (21 +20)
4 100 (22)
5 101 (22 +20)
6 110 (22 +21)
7 111 (22 +21+20)
8 1000 (23)
9 1001 (23+20)
發現了什麼規律?
對了,就是把指數轉換成二進位制數,再把二進位制數中所有“1”的權值都加起來!!
舉個栗子:
q=3時,x^3的係數=a[1]*a[0];
q=6時,x^6的係數=a[2]*a[1];
q=7時,x^7的係數=a[2]*a[1]*a[0];
q=10時,x^10的係數=a[3]*a[1];
這些得到的係數就是題目要求的答案呀~
還有個坑,就是用C語言的printf輸出死活都是WA,一改成C++的cin就AC了,估計是long long的格式控制問題吧。。
(⊙v⊙)嗯發現了,我在山理工的oj下提交這道題long long 不能用%I64d,用%lld就能過了~
下面上程式碼:
/*
* Copyright (c) 2016, 煙臺大學計算機與控制工程學院
* All rights reserved.
* 檔名稱:number.cpp
* 作 者:單昕昕
* 完成日期:2016年4月12日
* 版 本 號:v1.0
*/
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <time.h>
#include <stdlib.h>
using namespace std;
int a[51];//a0~an-1
long long ans,p;
int main()
{
int t,i,n,q;
cin>>t;
while(t--)
{
cin>>n;
for(i=0; i<n; ++i)
cin>>a[i];
cin>>q;
while(q--)
{
i=0;
ans=1;
cin>>p;
while(p)
{
//注意!!當此n下無指數p時,即位數超出n
if(i>=n)
{
ans=0;
break;
}//下面是一個類似於轉換二進位制的過程
if(p%2)
ans=(ans*a[i])%2012;
++i;
p/=2;
}
cout<<ans<<endl;
}
}
return 0;
}
相關文章
- 山東省第四屆ACM大學生程式設計競賽-Rescue The Princess(計算幾何)ACM程式設計
- 第八屆山東省ACM大學生程式設計競賽總結ACM程式設計
- 山東省第七屆ACM大學生程式設計競賽-Reversed WordsACM程式設計
- 山東省第四屆ACM大學生程式設計競賽-Contest Print Server(模擬)ACM程式設計Server
- 山東省第一屆ACM大學生程式設計競賽-Balloons(搜尋)ACM程式設計
- 山東省第六屆ACM大學生程式設計競賽-Square Number(完全平方數)ACM程式設計
- 山東省第六屆ACM大學生程式設計競賽-Lowest Unique Price(桶排序)ACM程式設計排序
- 山東省第四屆ACM大學生程式設計競賽-Boring Counting(劃分樹-二分查詢)ACM程式設計
- 山東省第六屆ACM大學生程式設計競賽-Single Round Math(大數除法)ACM程式設計
- 2012年"浪潮杯"山東省第三屆ACM大學生程式設計競賽(熱身賽)ACM程式設計
- 山東省第五屆ACM大學生程式設計競賽-Full Binary Tree(二叉樹&&求任意兩節點路徑)ACM程式設計二叉樹
- 山東省第五屆ACM大學生程式設計競賽-Hearthstone II(組合數學-第二類Stirling數)ACM程式設計
- 山東省第四屆acm解題報告(部分)ACM
- 山東省第八屆 ACM 省賽 quadratic equation (水、坑)ACM
- 第15屆浙江省大學生程式設計競賽D題程式設計
- 我校學子在山東省ACM競賽中獲得優異成績ACM
- 湖南省大學生程式設計競賽系統設計程式設計
- ACM競賽中用到的二進位制處理方法(完善中)ACM
- 2019山東ACM省賽補題題解ACM
- [題解][2021-2022年度國際大學生程式設計競賽第10屆陝西省程式設計競賽] Type The Strings程式設計
- 無錫學院2024年ACM大學生程式設計競賽校選賽 題解ACM程式設計
- [補題] 第 45 屆國際大學生程式設計競賽(ICPC)亞洲區域賽(上海)程式設計
- 2014年藍橋杯程式設計大賽山東省賽區成績公佈程式設計
- 第43屆ACM-ICPC國際大學生程式設計競賽 亞洲區域賽南京站現場賽名額分配相關說明ACM程式設計
- 2020 年第一屆遼寧省大學生程式設計競賽 D.開心消消樂(點分治)程式設計
- 二進位制 (小白進軍程式設計師)程式設計師
- 第二屆“祥雲杯”網路安全大賽暨吉林省第四屆大學生網路安全大賽火熱報名中
- 方格分割 二進位制列舉+DFS(2017 第八屆藍橋杯省賽A組 第4題)
- ACM-ICPC世界冠軍教你如何備戰程式設計競賽ACM程式設計
- 2017第二屆廣東省強網杯線上賽- who are you
- QZEZ第一屆“飯吉圓”杯程式設計競賽程式設計
- 中國計量大學現代科技學院第四屆“中競杯”程式設計校賽(同步賽) F.爬塔(DP)程式設計
- 第二屆“演算法控”馬拉松程式設計競賽 解題思路演算法程式設計
- Codeforces 346A Alice and Bob
- 某演算法競賽題——把一個二進位制的串轉換為十進位制整數演算法
- 資料競賽:第四屆工業大資料競賽-虛擬測量大資料
- 華中農業大學第十三屆程式設計競賽程式設計
- [計算機基礎] 計算機進位制轉換:二進位制、八進位制、十進位制、十六進位制計算機