題意:判斷所給表示式的奇偶性
思路:打表發現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...