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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

套题T4

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

?

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

話說出題人不會被查水表吧。

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

輸入格式

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

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

輸出格式

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

樣例輸入

3 1

1 2 3

樣例輸出

????3

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

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

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

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


?

0表示不取 1表示取

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

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

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

最后統(tǒng)計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表示選了幾個數(shù) } // printf("i = %d : tmp = %d\n",i,tmp);if(tmp==k)//如果選了k個 {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?

因為1<<j是...001000...的形式存在,所以和 i 與起來,要是 i 這一位是 1 , 就是1,i 這一位是0,就是0

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

?

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

?


?

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

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

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

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

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

?

?

?

?

?

?

?

?

?

?


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

【題目描述】

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

【輸入格式】

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

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

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

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

【輸出格式】

* Lines 1..F: 如果John能在這個農(nóng)場實現(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.一個點如果經(jīng)過一個環(huán)以后dis一直在變小,那么顯然這個環(huán)是負環(huán)
2.如果沒有負環(huán)一個點最多進隊n次(每條只想j的邊都維護一遍dis)

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

while(!q.empty())?

?

?

?

?

?

?

?

?

?

?

?

?


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

【題目描述】

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

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

【輸入格式】

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

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

【輸出格式】

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

【樣例輸入】

NSWWNSNEEWN

12

【樣例輸出】

-1 3

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

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

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

?

【注意】

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

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

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

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


?

?由于t特別大然后操作序列最長只有5000

?

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

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

#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; } 模擬也要動腦子QAQ

?

?

?

?

?

?

?

?

?

?

?

?

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

總結(jié)

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

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