USACO Section 1.2 Greedy Gift Givers (简单查找)
生活随笔
收集整理的這篇文章主要介紹了
USACO Section 1.2 Greedy Gift Givers (简单查找)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2018-3-25 changed
題目大意就是說我們要互相 ” 送錢 ” ,一共NP個人,指定某一個人將sum這么多的錢分給num個人,那么這些人每個人多了sum/num,送錢的那個人減少了sum,但是由于我們要保證每個人分到的錢都是整數,所以沒有被整除的那一部分又回來了。如果說分給了0個人,則不做處理,繼續輸入。
主要是根據名字找到所在位置,然后改變對應的數值
法一:線性查找
/* ID: 18795871 PROG: gift1 LANG: C++ */ #include<iostream> #include<fstream> #include<cstring> using namespace std;ifstream fin("gift1.in"); ofstream fout("gift1.out");const int N = 10; char name[N+1][15]; int mon[N+1]; int n;int getIndex(char *p){for (int i=0;i<n;i++){if (strcmp(name[i],p)==0) return i;} }int main(){int i,j;while (fin>>n){memset(mon,0,sizeof(mon));for (i=0;i<n;i++){fin>>name[i];}char t[15],k[15];int sum,num,ave,giv;while (fin>>t>>sum>>num){if (num==0) continue;ave=sum/num;giv=sum-ave*num;mon[getIndex(t)]+=(giv-sum);for (j=0;j<num;j++){fin>>k;mon[getIndex(k)]+=ave;}}for (i=0;i<n;i++){fout<<name[i]<<" "<<mon[i]<<endl;}}return 0; }法二:map鍵值對應
/* ID: 18795871 PROG: gift1 LANG: C++ */ #include<iostream> #include<fstream> #include<cstring> #include<map> using namespace std;ifstream fin("gift1.in"); ofstream fout("gift1.out");const int N = 10; string name[N+1]; int n;int main(){int i,j;string tmp;while (fin>>n){map<string,int>myMap;for (i=0;i<n;i++){fin>>name[i];myMap[name[i]]=0;}int sum,num,ave,giv;while (fin>>tmp>>sum>>num){if (num==0) continue;ave=sum/num;giv=sum-ave*num;myMap[tmp]+=(giv-sum);for (j=0;j<num;j++){fin>>tmp;myMap[tmp]+=ave;}}for (i=0;i<n;i++){fout<<name[i]<<" "<<myMap[name[i]]<<endl;}}return 0; }總結
以上是生活随笔為你收集整理的USACO Section 1.2 Greedy Gift Givers (简单查找)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql5.7.21源码安装
- 下一篇: 护工手机端页面总结