吳凡的題庫——快快程式設計701-800
阿新 • • 發佈:2022-04-09
- 位運算lowbit
題目描述
二進位制位運算中,有個很實用的函式叫lowbit,低位數值。定義lowbit(n)表示n的二進位制表示中最低位的1代表是十進位制的幾。例如十進 制數6對應2進 制110其中最低位的1代表2;十進位制數8對應2進位制1000其中最低位的1代表8. 請實現lowbit函式的運算:輸入十進位制正整數n,輸出lowbit(n)的返回值。
輸入輸出格式
輸入格式
輸入一個正整數n。n<=10^10
輸出格式
輸出一個正整數
輸入輸出樣例
輸入樣例#1:
6
輸出樣例#1:
2
輸入樣例#2:
3
輸出樣例#2:
1
輸入樣例#3:
100
輸出樣例#3:
4
#include<iostream> using namespace std; int lowbit(int a){ return a&(-a); } int main(){ int x; cin>>x; cout<<lowbit(x); return 0; }
- 位運算bitcount
題目描述
輸入十進位制正整數n,輸出n的二進位制共有幾位?其中有幾個1?有幾個0?
輸入輸出格式
輸入格式
輸入一個正整數n。n<=10^10
輸出格式
輸出3個整數,由空格隔開。
輸入輸出樣例
輸入樣例#1:
6
輸出樣例#1:
3 2 1
輸入樣例#2:
2
輸出樣例#2:
2 1 1
輸入樣例#3:
100
輸出樣例#3:
7 3 4
#include<iostream> using namespace std; int CountBit(int x){ int ret = 0; while(x){ ret++; x >>= 1; } return ret; } int CountOne(int x){ int ret = 0; while(x){ ret++; x &= x-1; } return ret; } int main(){ int a; cin>>a; int all, one, zero; all = CountBit(a); one = CountOne(a); zero = all - one; cout<<all<<" "<<one<<" "<<zero; return 0; }
- 二進位制小數
題目描述
輸入一個二進位制數,帶有小數點和3位小數。請輸出對應的十進位制數,保留3位小數。 輸入一行,如題。 輸出一個浮點數。
輸入輸出格式
輸入格式
輸入一個二進位制數,帶有小數點和3位小數。
輸出格式
請輸出對應的十進位制數,保留3位小數。
輸入輸出樣例
輸入樣例#1:
100.100
輸出樣例#1:
4.500
輸入樣例#2:
1111.111
輸出樣例#2:
15.875
輸入樣例#3:
輸出樣例#3:
#include<bits/stdc++.h> using namespace std; int main(){ string s; cin>>s; double ans=0; int i; for(i=0;i<s.size();i++){ if(s[i]=='.')break; ans *= 2; if(s[i]=='1')ans++; } if(s[i+1]=='1') ans += 0.5; if(s[i+2]=='1') ans += 0.25; if(s[i+3]=='1') ans += 0.125; cout<<fixed<<setprecision(3)<<ans; return 0; }
- 出棧順序
題目描述
從1到n的n個整數準備依次入棧,其間會伴隨著n次出棧操作,但是入棧和出棧的前後順序有點混亂,需要你來幫忙確定最終的出棧順序。輸入2*n個操作指令,包含n次push和n次pop。push代表入棧,pop代表出棧。在保證操作均合法的情況下,請輸出出棧順序。
輸入輸出格式
輸入格式
輸入第一行為正整數n,第二行為2*n個字串操作指令,有空格隔開。n<=100000。
輸出格式
輸出一行包含n個數字代表出棧順序,有空格隔開。
輸入輸出樣例
輸入樣例#1:
3
push push push pop pop pop
輸出樣例#1:
3 2 1
輸入樣例#2:
2
push pop push pop
輸出樣例#2:
1 2
輸入樣例#3:
輸出樣例#3:
#include<iostream>
#include<string>
using namespace std;
const int N=100009;
int stk[N], top=0;
void push(int x){
stk[++top]=x;
}
void pop(){
top--;
}
int main(){
int num;
cin>>num;
int t1=1;
string s;
for(int i=0;i<num*2;i++){
cin>>s;
if(s=="push")
push(t1++);
else{
cout<<stk[top]<<" ";
pop();
}
}
return 0;
}
- a乘b
題目描述
輸入兩個整數a,b,請計算兩個整數的乘積
輸入輸出格式
輸入格式
輸入檔案ab.in
輸入一行包含兩個整數,有空格隔開,絕對值均不超過1000000000
輸出格式
輸出檔案ab.out
輸出一個整數
輸入輸出樣例
輸入樣例#1:
2 3
輸出樣例#1:
6
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("ab.in", "r", stdin);
freopen("ab.out", "w", stdout);
long long result, a, b;
cin>>a>>b;
result = a * b;
cout<<result<<endl;
return 0;
}
- 格子染色1
題目描述
有一排格子需要染色,每個格子只可以是RGB這3種顏色之一,要求相鄰兩格不能同色。目前有些格子已經有固定顏色不能改變了,剩下的格子可以選擇 列。
輸入輸出格式
輸入格式
輸入檔案color.in
輸入一行字串,長度<=10
輸出格式
輸出檔案color.out
輸出若干行字串,行末沒有空格
輸入輸出樣例
輸入樣例#1:
RoR
輸出樣例#1:
RBR
RGR
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
#include<bits/stdc++.h>
using namespace std;
int n, p[11];
void print(){
for(int i=1;i<=n;i++)
if(p[i]==0)
cout<<'B';
else if(p[i]==1)
cout<<'G';
else if(p[i]==2)
cout<<'R';
cout<<endl;
}
void dfs(int x){
if(x==n+1){print();return;}
if(p[x]>=0){dfs(x+1);return;}
for(int i=0;i<3;i++)
if(x==1&&p[2]!=i||x==n&&p[n-1]!=i||x>1&&x<n&&p[x-1]!=i&&p[x+1]!=i){
p[x]=i;
dfs(x+1);
p[x]=-1;
}
}
int main(){
freopen("color.in", "r", stdin);
freopen("color.out", "w", stdout);
char ch;
while(cin>>ch){
++n;
if(ch=='B')p[n]=0;
else if(ch=='G')p[n]=1;
else if(ch=='R')p[n]=2;
else p[n]=-1;
}
p[0]=p[n+1]=-1;
dfs(1);
return 0;
}
- 汪星人
題目描述
你是一隻汪星人,地球毀滅後你回到了汪星,這裡每天有n個小時,你需要為自己選擇正好連續的m小時作為每天睡眠的時間。從凌晨開始,第i小時內的睡眠質量為xi,請問經過選擇後,你的睡眠質量總和最大是多少?
輸入輸出格式
輸入格式
輸入檔案dog.in
輸入第一行為正整數n,m,1<=m<=n<=100000. 第二行為n個整數依次代表每小時的睡眠質量,絕對值均不超過100
輸出格式
輸出檔案dog.out
輸出一個整數
輸入輸出樣例
輸入樣例#1:
5 2
1 -1 -1 -1 2
輸出樣例#1:
3
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
#include<bits/stdc++.h>
#define N 100003
using namespace std;
int s[N],x[N],n,m;
int main(){
freopen("dog.in","r",stdin);
freopen("dog.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>x[i];
for(int i=1;i<=n;i++)s[i]=s[i-1]+x[i];
int ans=s[m];
for(int i=m+1;i<=n;i++)ans=max(ans,s[i]-s[i-m]);
for(int i=1;i<=m-1;i++)ans=max(ans,s[i]+s[n]-s[n-m+i]);
cout<<ans<<endl;
return 0;
}
- 魔擬賽1
題目描述
為了備戰全宇宙程式設計大賽,我們開展魔鬼式訓練,共舉辦n場模擬賽,每天一場。每一場你都可以選擇參加或者不參加,但是要注意:不 能出現連續兩 天都參加,因為連續訓練會積勞成疾。請問你有多少種不同的訓練安排?
因為該數字可能非常大,請輸出方案數對1000007取模的結果。
輸入輸出格式
輸入格式
輸入檔案monster.in
輸入第一行為正整數n, 0<=n<=100
輸出格式
輸出檔案monster.out
輸出一個整數
輸入輸出樣例
輸入樣例#1:
2
輸出樣例#1:
3
輸入樣例#2:
8
輸出樣例#2:
55
輸入樣例#3:
輸出樣例#3:
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("monster.in", "r", stdin);
freopen("monster.out", "w", stdout);
int n, f[101];
cin>>n;
f[1] = 2;
f[2] = 3;
for(int i=3; i<=n; i++)
f[i] = (f[i-1] + f[i-2]) % 1000007;
cout<<f[n] % 1000007;
return 0;
}
- 福利發放
題目描述
極客帝國共n個國民,國家發行的數字貨幣極客幣大獲成功,極客帝國決定向國民發放福利,賬戶上小於等於X極客幣的人都可以獲得福利,求發放福利的總人數是多少。現在面向公眾徵求意見,共提出m種方案(方案可能相同),你需要計算每一種方案發放福利的人數。
資料規模,n<=100000,m<=100000,X<=109,賬戶最大存款餘額不超過109。
輸入輸出格式
輸入格式
輸入檔案fuli.in
第一行,n和m,n表示極客帝國人數,m表示方案數量。
第二行,n個整數,表示每個國民賬號內極客幣數量。
第三行,m個整數,表示m種福利發放方案,賬號內低於或等於該數字的人都可以獲得福利。
輸出格式
輸出檔案fuli.out
每行一個整數,表示該方案下有多少個人可以獲得福利。
輸入輸出樣例
輸入樣例#1:
7 3
100 150 80 30 50 200 70
100
150
75
輸出樣例#1:
5
6
3
輸入樣例#2:
無
輸出樣例#2:
無
輸入樣例#3:
無
輸出樣例#3:
無
說明
#include<bits/stdc++.h>
using namespace std;
int main(){
freopen("fuli.in", "r", stdin);
freopen("fuli.out", "w", stdout);
int n, m, a[100001], x;
cin>>n>>m;
for(int i=0;i<n;i++)cin>>a[i];
sort(a, a+n);
for(int i=0;i<m;i++){
cin>>x;
int ux=upper_bound(a,a+n,x)-a;
cout<<ux<<endl;
}
return 0;
}
- 有理數
題目描述
數學家康託證明了有理數(某整數除以某整數)是可列舉的。證明非常巧妙,小學生也能看得懂,他用了下面這一張表來說明任意給定的有理數都會在 表格裡出現。
1/1
1/2
1/3
1/4
1/5
1/6
2/1
2/2
2/3
2/4
2/5
…
3/1
3/2
3/3
3/4
…
…
4/1
4/2
4/3
…
…
…
5/1
5/2
…
…
…
…
6/1
…
…
…
…
…
這張表格的填寫順序為Z字型填寫:1/1, 1/2, 2/1, 3/1, 2/2, 1/3, 1/4, 2/3, …
請問表格中第n個填寫的是幾分之幾呢?注意不需要約分。
輸入輸出格式
輸入格式
輸入一個正整數n,n<=10000000
輸出格式
輸出一個整數,一個斜槓/,再一個整數,中間沒有空格
輸入輸出樣例
輸入樣例#1:
7
輸出樣例#1:
1/4
輸入樣例#2:
10
輸出樣例#2:
4/1
輸入樣例#3:
輸出樣例#3:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int id=1;
int cnt=0;
while(cnt+id<n){
cnt+=id;
id++;
}
if(id%2==0)
cout<<n-cnt<<"/"<<id-(n-cnt)+1<<endl;
else
cout<<id-(n-cnt)+1<<"/"<<n-cnt<<endl;
return 0;
}
- 公里數
題目描述
某輛車的里程錶出現了故障:它總是跳過數字3和數字8。也就是說,當前顯示已走過兩公里時,如果車子再向前走一公里,那麼將顯示4 公里,而不是3公里(數字3跳過了)。再比如,當前是15229公里,車子再向前走一公里,顯示的是15240公里,而不是15230公里。數字8也同樣跳過。
寫一個程式,根據里程錶上顯示的數字,計算車子真正走了多少公里。
輸入輸出格式
輸入格式
輸入檔案gls.in 故障里程錶顯示的公里數s(1≤s≤1000000)
輸出格式
輸出檔案gls.out 正確的公里數
輸入輸出樣例
輸入樣例#1:
15
輸出樣例#1:
12
樣例說明:
1到15數字中,包含數字3、8、13
輸入樣例#2:
2
輸出樣例#2:
2
輸入樣例#3:
輸出樣例#3:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll countk(ll x, ll k){
ll cnt=0;
do{
if(x%10==k)cnt++;
x /= 10;
}while(x);
return cnt;
}
int main(){
freopen("gls.in", "r", stdin);
freopen("gls.out", "w", stdout);
ll n, ans=0;
cin>>n;
for(ll i=1; i <=n; i ++)
if(countk(i, 3)==0&&countk(i, 8)==0)
ans ++;
cout<<ans<<endl;
return 0;
}
- 幸運整數(BestAC by業皓展)
題目描述
小明對數字“5”和“8”非常感興趣,認為是幸運數字,那麼僅用幸運數字組成的整數就是幸運整數,請你幫助小明找出從5開始從小到大第k個幸運整數。
輸入輸出格式
輸入格式
僅一行包含一個正整數k(k≤300)。
輸出格式
僅一行包含一個正整數,為第k個幸運整數。
輸入輸出樣例
輸入樣例#1:
3
輸出樣例#1:
55
【樣例說明】
第1個幸運整數5開始從小到大,第2個是8,第3個是55。
輸入樣例#2:
輸出樣例#2:
輸入樣例#3:
輸出樣例#3:
#include<iostream>
using namespace std;
typedef long long ll;
bool lucky(ll x){
do{
ll r = x % 10;
if(r != 5 && r != 8) return 0;
x /= 10;
}while(x);
return 1;
}
int main(){
ll k, n=5, i=1;
cin>>k;
while(i<k){
n ++;
if(lucky(n)) i ++;
}
cout<<n<<endl;
return 0;
}