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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

套题T4

發(fā)布時(shí)間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 套题T4 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

Problem 1 無(wú)聊的gcd(gcd.c/cpp/pas)

話說(shuō)出題人不會(huì)被查水表吧。

簡(jiǎn)單的問(wèn)題描述:從N個(gè)正整數(shù)里面取出K個(gè)數(shù)的最大公因數(shù)最大是多少。(請(qǐng)將答案乘上k之后輸出哦,謝謝合作。)

輸入格式

第一行兩個(gè)正整數(shù)N,K。

第二行n個(gè)正整數(shù)

輸出格式

輸出一個(gè)正整數(shù)表示最大的最大公因數(shù)。

樣例輸入

3 1

1 2 3

樣例輸出

????3

數(shù)據(jù)說(shuō)明

對(duì)于30%的數(shù)據(jù),保證k≤n≤20。

對(duì)于50%的數(shù)據(jù),保證輸入中所有數(shù)小于5000。

對(duì)于100%的數(shù)據(jù),保證輸入中所有數(shù)小于500000,k≤n。


?

0表示不取 1表示取

用i的二進(jìn)制表示狀態(tài) ?比如i=10101表示取1,3,5? ??i=00110表示取3,4

然后for一遍,tmp表示i的二進(jìn)制當(dāng)中1的數(shù)量
如果1有k個(gè)
那么i代表的狀態(tài)選了k個(gè)數(shù)

for一遍把i表示的狀態(tài)取了的數(shù)的gcd取出來(lái)

最后統(tǒng)計(jì)ans

?

#include <cstdio> #include<iostream> using namespace std; const int Maxn = 40;int a[Maxn],n,k,ans=0;int gcd(int a,int b) {return b ? gcd(b,a%b) : a; }int max(int a,int b) {return a < b ? b : a ; }int main() {scanf("%d%d",&n,&k);for(int i=0;i<n;++i)scanf("%d",&a[i]);//讀入 for(int i=1;i<(1<<n);++i) {int tmp = 0;for(int j=0;j<n;++j) {if(i&(1<<j)) ++tmp;//tmp表示選了幾個(gè)數(shù) } // printf("i = %d : tmp = %d\n",i,tmp);if(tmp==k)//如果選了k個(gè) {tmp=-1;for(int j=0;j<n;++j) {if(i&(1<<j)) {if(tmp==-1) tmp=a[j];else tmp=gcd(a[j],tmp);}}ans = max(ans,tmp); // printf("ans : %d\n",ans); }}printf("%d",ans*k);puts("");return 0; } QAQ數(shù)論好煩啊

?

如果i&(1<<j)?==?1的話那么i的第j位就是1?

因?yàn)?<<j是...001000...的形式存在,所以和 i 與起來(lái),要是 i 這一位是 1 , 就是1,i 這一位是0,就是0

?所以 i&(1<<j) 表示 i 在二進(jìn)制下的第 j 位

?

?因?yàn)?<<0?=?1?這時(shí)候j=0?如果從1存的話就變成1<<1?=?2?那就時(shí)間復(fù)雜度*2 所以從0開始讀

?


?

首先所有輸入數(shù)字不大于50W,那么我們開一個(gè)50W的數(shù)組,記下每個(gè)數(shù)字出現(xiàn)多少次

然后就有一些有意思的事情發(fā)生了

我們從小到大枚舉答案?每個(gè)答案x,判定可行的方法就是遍歷每一個(gè)x的倍數(shù)

那么只要把所有x的倍數(shù)統(tǒng)計(jì)一下有多少看看是不是大于等于k就好了

如果我選的是這k個(gè)x的倍數(shù),那么我們不就知道答案至少是x了

?

?

?

?

?

?

?

?

?

?


Problem 2 蟲洞(wormhole.cpp/c/pas)

【題目描述】

John在他的農(nóng)場(chǎng)中閑逛時(shí)發(fā)現(xiàn)了許多蟲洞。蟲洞可以看作一條十分奇特的有向邊,并可以使你返回到過(guò)去的一個(gè)時(shí)刻(相對(duì)你進(jìn)入蟲洞之前)。John的每個(gè)農(nóng)場(chǎng)有M條小路(無(wú)向邊)連接著N (從1..N標(biāo)號(hào))塊地,并有W個(gè)蟲洞(有向邊)。其中1<=N<=500,1<=M<=2500,1<=W<=200。 現(xiàn)在John想借助這些蟲洞來(lái)回到過(guò)去(出發(fā)時(shí)刻之前),請(qǐng)你告訴他能辦到嗎。 John將向你提供F(1<=F<=5)個(gè)農(nóng)場(chǎng)的地圖。沒(méi)有小路會(huì)耗費(fèi)你超過(guò)10000秒的時(shí)間,當(dāng)然也沒(méi)有蟲洞回幫你回到超過(guò)10000秒以前。

【輸入格式】

* Line 1: 一個(gè)整數(shù) F, 表示農(nóng)場(chǎng)個(gè)數(shù)。

* Line 1 of each farm: 三個(gè)整數(shù) N, M, W。

* Lines 2..M+1 of each farm: 三個(gè)數(shù)(S, E, T)。表示在標(biāo)號(hào)為S的地與標(biāo)號(hào)為E的地中間有一條用時(shí)T秒的小路。

* Lines M+2..M+W+1 of each farm: 三個(gè)數(shù)(S, E, T)。表示在標(biāo)號(hào)為S的地與標(biāo)號(hào)為E的地中間有一條可以使John到達(dá)T秒前的蟲洞。

【輸出格式】

* Lines 1..F: 如果John能在這個(gè)農(nóng)場(chǎng)實(shí)現(xiàn)他的目標(biāo),輸出"YES",否則輸出"NO"。

【樣例輸入】

2

3 3 1

1 2 2

1 3 4

2 3 1

3 1 3

3 2 1

1 2 3

2 3 4

3 1 8

【樣例輸出】

NO

YES


?

1.一個(gè)點(diǎn)如果經(jīng)過(guò)一個(gè)環(huán)以后dis一直在變小,那么顯然這個(gè)環(huán)是負(fù)環(huán)
2.如果沒(méi)有負(fù)環(huán)一個(gè)點(diǎn)最多進(jìn)隊(duì)n次(每條只想j的邊都維護(hù)一遍dis)

所以vis記成int,int?vis[Maxn];

while(!q.empty())?

?

?

?

?

?

?

?

?

?

?

?

?


Problem 3 機(jī)器人(robot.cpp/c/pas)

【題目描述】

早苗入手了最新的Gundam模型。最新款自然有著與以往不同的功能,那就是它能夠自動(dòng)行走,厲害吧。

早苗的新模型可以按照輸入的命令進(jìn)行移動(dòng),命令包括‘E’、‘S’、‘W’、‘N’四種,分別對(duì)應(yīng)東南西北。執(zhí)行某個(gè)命令時(shí),它會(huì)向?qū)?yīng)方向移動(dòng)一個(gè)單位。作為新型機(jī)器人,它可以執(zhí)行命令串。對(duì)于輸入的命令串,每一秒它會(huì)按命令行動(dòng)一次。執(zhí)行完命令串的最后一個(gè)命令后,會(huì)自動(dòng)從頭開始循環(huán)。在0時(shí)刻時(shí)機(jī)器人位于(0,0)。求T秒后機(jī)器人所在位置坐標(biāo)。

【輸入格式】

1行:一個(gè)字符串,表示早苗輸入的命令串,保證至少有1個(gè)命令

2行:一個(gè)正整數(shù)T

【輸出格式】

2個(gè)整數(shù),表示T秒時(shí),機(jī)器人的坐標(biāo)。

【樣例輸入】

NSWWNSNEEWN

12

【樣例輸出】

-1 3

【數(shù)據(jù)范圍】

對(duì)于60%的數(shù)據(jù) T<=500,000 且命令串長(zhǎng)度<=5,000

對(duì)于100%的數(shù)據(jù) T<=2,000,000,000 且命令串長(zhǎng)度<=5,000

?

【注意】

向東移動(dòng),坐標(biāo)改變改變?yōu)?/span>(X+1,Y);

向南移動(dòng),坐標(biāo)改變改變?yōu)?/span>(X,Y-1);

向西移動(dòng),坐標(biāo)改變改變?yōu)?/span>(X-1,Y);

向北移動(dòng),坐標(biāo)改變改變?yōu)?/span>(X,Y+1);?


?

?由于t特別大然后操作序列最長(zhǎng)只有5000

?

?就先做一遍操作序列,看看做完一整個(gè)序列之后,x和y是變化量是多少,并記錄這個(gè)變化量

用t除以長(zhǎng)度,剩下的就是取模了就是t%長(zhǎng)度??就知道要做到哪里了

#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; char ch[5005]; int t,nn=0; int xx=0,yy=0; int x=0,y=0; int main() {scanf("%s%d",ch+1,&t);int n=strlen(ch+1);for(int i=1;i<=n;++i){if(ch[i]=='N')yy++;if(ch[i]=='S')yy--;if(ch[i]=='W')xx--;if(ch[i]=='E')xx++;}nn=t/n;t%=n;for(int i=1;i<=t;++i){if(ch[i]=='N')y++;if(ch[i]=='S')y--;if(ch[i]=='W')x--;if(ch[i]=='E')x++;}cout<<x+xx*nn<<" "<<y+yy*nn;puts("");return 0; } 模擬也要?jiǎng)幽X子QAQ

?

?

?

?

?

?

?

?

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/gc812/p/5837588.html

總結(jié)

以上是生活随笔為你收集整理的套题T4的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。