東華OJ 陣列競賽 分糖果
前言:最近一直先熟悉容器,用容器解題。但是東華OJ某些很好用的新C++標準的功能用不了,再加上自己對容器不熟悉。所以最近應該經常能在註釋裡看見不對的用容器的解法。
題意理解
不進位的二進位制很好理解。就是同位的數若相同就是0,不相同就是1.不進位正好減少了運算。
然後要求求最大的價值這句話就很容易讓人以為是動態規劃了。。(至少我這種蒟蒻第一瞬間的反應就是。。。
但結合第一條資訊很容易發現,如果最後要在不進位的二進位制運算下相同的價值,就是運算後左右兩堆的各位數字相同。如果再把這兩堆合為一堆,那麼很明顯,題意其實是在叫我們判斷是否這給出的所有糖果的價值在不進位的二進位制運算後各位都為0.如果想到這兒這題就很簡單了。
分解
三部分:
- 輸入
- 進位制轉化
- 判斷各位運算後結果是否都為0
解決方法
-
輸入準備
根據前面的分析,如果滿足結果各位為0,那麼最大的價值自然就是所有價值和-最小价值的糖果價值。所以在輸入的同時就可以求所有糖果和。 -
進位制轉換
對於一個10進位制的數,轉換成一個n進位制的數。只要先%n得到最高位的數,再/n;反覆進行直到為0. -
判斷各位的數是否為0
在運算的途中將運算的結果轉存到下一位,反覆進行,最終的運算結果也就轉移到了最後一位。最後判斷運算結果時只需要將最後一位拿出來比較就行了。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
for(int i=0;i<t;i++){
//進位制轉換
//求最優解
//分成不為空的兩個堆
//把小弟弟的堆單獨分出來,從最小的開始判斷是否會滿足二進位制不進位相同
vector<int> candy;
int k;
cin>>k;
int sum=0;//所有糖果價值總和
for(int j=0;j<k;j++){
int temp;
cin>>temp;
sum+=temp;
candy.push_back(temp);
}
vector<vector<int> > value;
sort(candy.begin(),candy.end(),less<int>());
for(int i=0;i<k;i++){//從大到小每個數的二進位制表示
vector<int> value2(8,0);
int temp = candy[i];
int j =0;
while(temp){
value2[j]=(temp%2);
temp/=2;
j++;
}
value.push_back(value2);
}
//升序排列的二進位制
//因為最後結果一定要求相同,若相同則結果一定相加為0
//所以直接把所有的位相加。若為0則可分。
int last =0;
for(int i=0;i<8;i++){
for(int j=1;j<k;j++){
if(value[j-1][i]==value[j][i]){
value[j][i]=0;
}
else{
value[j][i]=1;
}
last = j;
}
}
bool flag =1;
for(int i=0;i<8;i++){
if(value[last][i]!=0){
flag =0;
break;
}
}
if(flag){
cout<<sum-candy[0]<<endl;
}
else{
cout<<"NO"<<endl;
}
/*
for(vector<vector<int> >::iterator itr = value.begin();itr!=value.end();itr++){
for(int j=0;j<(*itr).size();j++){
cout<<(*itr)[j]<<" ";
}
cout<<endl;
}
*/
}
return 0;
}
相關文章
- 東華 OJ 一維陣列競賽 等差數列陣列
- 陣列演算法-差分陣列陣列演算法
- PHP 陣列搜尋 sdk & 陣列分頁PHP陣列
- 陣列元素劃分陣列
- 華中農業大學第十三屆程式設計競賽程式設計
- java大陣列劃分為若干小陣列Java陣列
- LeetCode 分發糖果LeetCode
- light oj 1080 線段樹和樹狀陣列陣列
- 聚焦實踐|綠盟科技支援全國大學生資訊保安競賽東北、華中賽區
- 山東省第四屆ACM大學生程式設計競賽-Boring Counting(劃分樹-二分查詢)ACM程式設計
- 給出分數陣列,得到對應的名次陣列陣列
- python演算法:分糖果Python演算法
- 華中農業大學第十三屆程式設計競賽 題解程式設計
- 第十四屆全國大學生資訊保安競賽創新實踐能力賽(華中賽區)比賽成功舉辦
- (演算法競賽)簡單易懂二分圖演算法
- 2015年藍橋杯省賽第5題--九陣列分數陣列
- 第八屆山東省ACM大學生程式設計競賽總結ACM程式設計
- 山東省第七屆ACM大學生程式設計競賽-Reversed WordsACM程式設計
- 我校學子在山東省ACM競賽中獲得優異成績ACM
- 使用陣列建立分頁資料陣列
- JavaScript 的新陣列分組方法JavaScript陣列
- 三分鐘看完「分糖果」演算法問題演算法
- C語言演算法競賽入門(二)—陣列元素移動、排序問題、猴子選大王問題C語言演算法陣列排序
- ACdream oj 1191 Dragon Maze(手速賽 A)Go
- (動態規劃)最小分糖果問題動態規劃
- LeetCode135. 分發糖果LeetCode
- LeetCode 1103[分糖果II]LeetCode
- 山東省第一屆ACM大學生程式設計競賽-Balloons(搜尋)ACM程式設計
- 以賽代練 | 綠盟科技助力2021年金華市銀行業網路安全競賽成功舉辦行業
- C++ 競賽排序C++排序
- 北美競賽-加拿大計算機競賽CCC-收穫滑鐵盧計算機
- js陣列操作——物件陣列根據某個相同的欄位分組JS陣列物件
- “東華春秋杯”上海大學生網路安全技能大賽決賽收官聚焦高校人才培養
- 第十四屆全國大學生資訊保安競賽-創新實踐能力賽|華中、東北賽區報名正式啟動
- 【Java】陣列二分查詢元素Java陣列
- 第十屆山東省大學生程式設計競賽題解(A、F、M、C)程式設計
- leetcode 135. 分發糖果 (相鄰的孩子中,評分高的必須糖果更多) 思維LeetCode
- 華東空管超越工作流管理