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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Geek Challenge

發布時間:2023/12/16 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Geek Challenge 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Geek Challenge (dfs預處理)

Description
Geek Challenge [SKRZAT] is an old, old game from Poland that uses a game console with two buttons plus a joy stick. As is true to its name, the game communicates in binary, so that one button represents a zero and the other a one. Even more true to its name, the game chooses to communicate so that the base of the number system is minus two, not plus two, so we’ll call this representation “Weird Binary”. Thus the bit positions label the powers of minus two, as seen in the following five-bit tables:

Numbers are presented on the screen in Weird Binary, and then numbers are accepted in response from the console as a stream of zeroes and ones, terminated by a five-second pause.
You are writing a computer program to support the novice geek in playing the game by translating numbers between decimal and Weird Binary.
Input
The first line in the file gives the number of problems being posed without any white space.
Following are that many lines. Each line will either be a conversion into Weird Binary or out of Weird Binary: the letter “b” indicates that the rest of the line is written in Weird Binary and needs to be converted to decimal; the letter “d” indicates that the rest of the line is written in decimal and needs to be converted to Weird Binary.
The input data are in the range to fit within a 15-bit Weird Binary number, which represents the decimal number range –10922 to 21845, inclusive.
Output
For each conversion problem, show the type of problem, its input string, and the converted result in the format shown below, replicating even the spacing exactly as shown. Leading zeroes are not allowed.
Samples
Input
10
b 1001101
b 0111111
b 101001000100001
b 010010001000010
b 100110100110100
d -137
d 137
d 8191
d -10000
d 21000
Output
From binary: 1001101 is 61
From binary: 0111111 is -21
From binary: 101001000100001 is 19937
From binary: 010010001000010 is -7106
From binary: 100110100110100 is 15604
From decimal: -137 is 10001011
From decimal: 137 is 110011001
From decimal: 8191 is 110000000000011
From decimal: -10000 is 10100100110000
From decimal: 21000 is 101011000011000


思路:(sj啟迪)
①b操作很簡單;
②d操作,我們每一位進行暴力就好了,同map存一下(215)
注意前導零以及對0的操作


Code:

#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> PI; const int N = 2e4+10; const int mod = 100003; int T,x; string s; map<int,string> mp; void dfs(int c,int s,string x) {if(c>15) return;string t1,t2;int now;t1 = x + "0";t2 = x + "1";mp[s] = t1;dfs(c+1,s,t1);if((c+1)&1) s += pow(2,c);else s -= pow(2,c);mp[s] = t2;dfs(c+1,s,t2); } int main() {dfs(0,0,"");cin >> T;while(T--) {char op;cin >> op;if(op == 'b') {cin >> s;ll res = 0;int len = s.size();for(int i=0; i<len; i++) {ll tep = pow(2,len-i-1) * (s[i]-'0');if((i+1)&1) res += tep;else res -= tep;}cout<<"From binary: "<<s<<" is "<<res<<endl;} else {cin >> x;string tep = mp[x],res;reverse(tep.begin(),tep.end());int k = 0;while(tep[k]=='0') k++;tep.erase(tep.begin(),tep.begin()+k);if(!x) tep = "0";cout<<"From decimal: "<<x<<" is "<<tep<<endl;}}return 0; } /* 10 b 1001101 b 0111111 b 101001000100001 b 010010001000010 b 100110100110100 d -137 d 137 d 8191 d 0 d 21000 */

總結

以上是生活随笔為你收集整理的Geek Challenge的全部內容,希望文章能夠幫你解決所遇到的問題。

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