2018CCPC吉林賽區 重現賽 部分

2021-09-25 09:08:41 字數 4528 閱讀 7854

題意:判斷所給表示式的奇偶性

思路:打表發現1-3為奇數,4-8為偶數,9-15為奇數,16-24為偶數,25-35為奇數

#include

using namespace std;

typedef

long

long ll;

const

int inf=

0x3f3f3f3f

;const

int max_n=

5e4+10;

int a[max_n]

;int

main()

if(ans%2==1)

printf("%d ",i);

if(i%10==0) printf("\n");

}*/int t;

scanf

("%d"

,&t)

;for

(int i=

1;i<=t;i++

)return0;

}

題意:給了一些地方的時間,我們輸入乙個時間,輸入兩個字串,第乙個代表本地時間,第二個代表要轉換成的城市的時間。輸出轉換後的時間。

思路:一開始用12小時制,同時判斷am/pm和天數是否發生了改變,這樣過於複雜,我們可以把我們得到的時間先轉換成24小時制,然後我們根據24小時制判斷天數是否發生了變化,最後判斷是否這個時間是上午還是下午,輸出即可。

#include

using namespace std;

typedef

long

long ll;

const

int inf=

0x3f3f3f3f

;const

int max_n=

5e4+10;

int val[5]

;map<

char

,int

>m;

map<

int,

int>m1[5]

;void

init()

}}intmain()

else

if(time[0]

=='a'

&&hh==

12) hh=0;

if(time[0]

=='p'

&&hh!=

12) hh+=12

; string day;

int valb=m[b[0]

],valc=m[c[0]

];if(m1[valb]

[valc]==0

)else

if(m1[valb]

[valc]

>0)

else

}else

else}if

(hh==0)

else

if(hh>

0&&hh<12)

else

if(hh==12)

else

cout<<

"case "

<": "

; cout<" "<":"<<<<

" "<<<}return0;

}

題意:給你n個數,第i個數為k[i],如果把每個數變成1/2k[i],我們把這些數一共分成兩組,問這兩組數能否全部大於等於1/2。

思路:我們可以發現,如果要滿足題意的話,對於其中的一組,我們需要1個1(1/2),2個2(1/4),4個3(8/1),8個4(1/16),1個1(1/2)就是2個2(1/4),1個2就是2個(1/4),那麼我們就可以用cnt1,cnt2分別表示兩個組個需要多少個now,剛開始的時候,全部初始化為1,表示兩個組分別需要1(1/2)1個,我們對輸入的陣列排序,然後遍歷陣列,如果陣列中剩餘數的個數》=cnt1+cnt2,說明能夠湊夠那麼多數滿足題意,否則就不能湊夠輸出no,如果能夠湊夠還要滿足當前需要的數是什麼,如果當前需要的數發生改變,那麼兩組需要這個數的數量也需要發生改變。

#include

using namespace std;

typedef

long

long ll;

const

int inf=

0x3f3f3f3f

;const

int max_n=

1e5+10;

int vis[max_n]

;struct node

}a[max_n]

;int

main()

bool flag=true;

sort

(a+1

,a+n+1)

;int cnt1=

1,cnt2=

1,now=1;

//當前1每組各需要多少

for(

int i=

1;i<=n;i++)if

(cnt1+cnt2>n-i+1)

if(cnt1)

elseif(

!cnt1&&

!cnt2)

break;}

printf

("case %d: "

,cnt);if

(!flag)

printf

("no\n");

else

}return0;

}

題意:給我們n個電台,每個電台有乙個值radi,每個電台能夠發射訊號的範圍是[i-radi+1,i+radi-1],我們下面的訊號為完美訊號,ki-1 >= i-radi+1,我們可以得到radi>=1,從而得到i+radi-1>=i,根據題意我們可以找到的完美訊號一定在i的左邊,並且這個電台和它前面乙個電台一定不是完美訊號,剩下的都是完美訊號。那麼我們就可以計算完美訊號的個數:i-(i-a[i]+1)+1-2,就得到了對於每個電台完美訊號的個數為:a[i]-2,如果這個數小於零說明沒有完美訊號,反之則有a[i]-2個完美訊號。

#include

using namespace std;

typedef

long

long ll;

const

int inf=

0x3f3f3f3f

;const

int max_n=

1e6+10;

ll a[max_n]

;int

main()

printf

("case %d: "

,cnt)

;printf

("%lld\n"

,ans);}

return0;

}

題意:alice和bob玩遊戲,這個遊戲是這樣的,alice有n只怪獸,bob有m只怪獸,alice的怪獸可以攻擊bob的怪獸,但是bob有些怪獸處於防禦狀態。這個遊戲的掉血規則如下:怪獸攻擊力大的一方獲勝,並且這個怪獸的攻擊力不變,弱的一方怪獸消失,並且輸的一方掉血為兩隻怪獸攻擊力的差值,如果某一方怪獸處於防禦狀態,那麼這只怪獸只能被摧毀,輸的一方不掉血。

思路:我們有兩種選擇:第一種:我們不管防禦的怪獸,直接去攻擊沒有防禦的怪獸。第二種:摧毀所有有防禦的怪獸,然後去攻擊沒有防禦的怪獸。最後比較兩種情況的最大值即可。

#include

using namespace std;

typedef

long

long ll;

const

int inf=

0x3f3f3f3f

;const

int max_n=

1e5+10;

int a[max_n]

;struct node

}b[max_n]

;int

main()

if(!b[i]

.status&&i==m)

}//直接攻擊沒有防禦的怪獸

for(

int i=

1;i<=index;i++

)//bob沒有怪獸可用,那麼可以直接攻擊bob

if(index==m)

sort

(a+1

,a+n+1)

;int j=n;

bool flag=true;

//摧毀所有怪獸的防禦

for(

int i=m;i>=index+

1;i--)if

(j<0)

}//如果全部摧毀,則可以攻擊無防禦的怪獸

if(flag)

}//如果bob沒有怪獸可用,可以直接攻擊bob

for(

int i=

1;i<=j;i++

) ans2+

=(ll)a[j];}

//輸出二者中最大的即可

printf

("case %d: "

,cnt)

;printf

("%lld\n"

,max

(ans1,ans2));

}return0;

}

2018ccpc吉林 C JUSTICE 思維

題意 n個物品,每個物品重量1 2 k i 問可不可以分成兩份,讓這兩份的總量都大於1 2 題解 因為兩份都要大於1 2,那麼我們兩份都找出1 2,剩下的就無所謂了。我們把問題轉化為,兩份都需要找到乙個1,因為 1 2 1 4 1 4,所以乙個1等價於兩個2,4個3.我們先從小到大排個序,令cnt1...

2018CCPC吉林C JUSTICE(思維模擬)

題意 給你n個數,能否分成兩組,使每組的2的ki次方分之一的和大於等於二分之一,能的話輸出分組方案 思路 不難發現,例,也就是2個k能合成乙個k 2,能不能分成兩組,只需要看最後合完之後1的個數是不是大於等於2。利用二進位制的原理,優先佇列 並查集,先取出權值最小的,進行合併,如果兩個值相同,則可以...

秦皇島2018CCPC現場賽

所有的磨難挫折,都該慶幸,它來的還不算晚.大海我來了 來之前,就聽說這裡有海,很欣喜.畢竟乙個土生土長的山西人,還沒 看過大海.坐了一夜的火車,下車直奔博維酒店,距離比賽地點特別近,步行10分鐘,搞定了報道,然後就回酒店補覺了.下午ge掉了開幕式,在熱身賽開始前,堪堪來到賽場.熱身賽 cqw和xzw...