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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

USACO Section 1.2 Greedy Gift Givers (简单查找)

發布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 (简单查找)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。