1019.礼物
Time Limit: 1000 MS ?? Memory Limit: 32768 KB
Total Submission(s):?708??? Accepted Submission(s):?261
Description
圣誕節快到了,同學們每個人都準備了一定的錢用來買禮物。已知每個人送禮物的時候都會把自己準備的錢平均分成自己要送的人數份,送給自己的好友,剩余的錢留在自己手中。同時,也會收到若干份禮物。//我也很奇怪,為什么會有剩余,難道是無法整除?(沒錯!
現在,LG統計了一下每個人送禮的情況,想請你計算一下大家賠了還是賺了。
Input
第1行一個整數N(0<N<=100),表示人數;
第2行至第N + 1每行一個長度小于50的字符串,表示每個人的名字;
其后N段,每段第一行為人名;
每段第二行為兩個整數Si(0<=Si<=10000),Ki(0<=Ki<M),表示這個人準備的用于送禮的錢數和他要送的好友數;
每段其余Ki行每行一個人名,表示要送給的好友。
Output
共N行,按照輸入第2至第N + 1行給定的順序輸出人名及每個人賺了多少(若賠了則輸出負數)
Sample Input
3 LG SYC WZ LG 55 2 SYC WZ SYC 100 0 WZ 77 2 LG SYCSample Output
LG -16 SYC 65 WZ -49Source
SDNU ACM-ICPC 2011復賽(2011級)
注意:
(一)
if(x[i].name == s)對標的是:
char name[58];
string s;
或
string name[58];
string s;
不可以
char name[58];
char s[58];
解決:用
if(strcmp(s,x[i].name)==0)
(二)
無法整除的解決核心:
x[k].sum-=(mon/num)*num;
x[j].sum += (mon / num);
附上AC代碼:
#include <cstdio> #include <iostream> using namespace std;struct node {char name[58];int sum; }x[100000 + 8];int n,i,k,j,t,mon,num; string s;int main() {cin>>n;for(i=0; i<n; i++){scanf("%s",&x[i].name);x[i].sum=0; }for(i=0; i<n; i++){cin>>s;scanf("%d%d",&mon,&num);for(int k=0; k<n; k++){if(x[k].name == s){if(num==0)x[k].sum-=0;else if(num>0) x[k].sum-=(mon/num)*num;break;// }}for(int k= 0; k < num; k++){cin>>s;for(int j= 0; j < n; j++){if(x[j].name == s){if(num==0)x[j].sum+=0;elsex[j].sum += (mon / num);break;}}}}for(i = 0; i < n; i++){cout<<x[i].name<<" "<<x[i].sum<<'\n';}return 0; }
?
總結
- 上一篇: SuperPoint学习训练纪录 盘点各
- 下一篇: 爱彼迎的数据分析与建模