蒟蒻先提前说明一下:
于是在这样的背景下,我写下了一串丑陋的代码;
先申明,本贴用意为:
请大佬帮忙看下思路是否有问题
我知道时间复杂度绝对T飞,求是否能优化,若能又该怎么优化
若我的思路有误请指出,最好能提出方案(这是我第一次写100多行代码。。)
若我的代码实在是没救请说说你们的思路(希望不要再田忌赛马什么的了)
最后——
/*
前言:请各位大佬看看我的代码和大致思路是否正确(我知道我的思路是错的)
也希望有大佬能回复说您的AC思路
*/
#include<bits/stdc++.h>
using namespace std;
struct person{
int huase;//花色
int num;//其值
int vis=false;//先默认还没有使用,即false
}d[100009];
/*
思路(贪心):对于每一次出牌,都有出或不出的选择;
一、若要出牌,首先要有花色相同的牌
为了不输,应该每次取花色相同时大于等于b的数中最小的第i张牌为后面打好铺垫
二、如果不出牌,则被对面拿走c颗糖后(较亏),所以除非没有合适的花色,就不可能不出牌(样例#2帮我验证了这个思路是错的,望指教!)
我又想了一下:要不就将这两个进行比较吧!
能出牌毫无疑问是下面的思路;
那不能出牌时,分为:
1.出花色相同而D的牌小于b的最小值对应的第i张牌
2.没有花色根本出不了牌
3.最后的candy取最大值
然而#2再次反驳了我的观点。。。(越看越像dp,但是直觉告诉我这“可能”只是个纯模拟。。。)
我已绞尽脑汁。。
*/
int candy;
int n,m,c,v;
int ans[100009],nnow=1;
int main(){
cin>>n>>m>>c>>v;
for(int i=1;i<=n;i++) cin>>d[i].huase>>d[i].num;
candy=v;
for(int i=1;i<=m;i++){
int a,b;
cin>>a>>b;//小C出了花色为a,其值为b的牌
int cha=0x7f7f;//自己出的牌与小C的牌的差
int now=0;
bool hua=false;//先默认目前没有合适的花色
bool has=false;//在有合适的花色下是否有其值大于等于b的牌
//接下来判断的是是否有满足可以使自己稳赚不赔(有相同花色的情况下其值最小)
for(int j=1;j<=n;j++){//枚举小d的牌
if(d[j].huase==a&&!d[j].vis){//花色相同且还没使用则选牌
hua=true;//已有合适的花色
if(b<=d[j].num&&!d[j].vis){//其值足够
has=true;//有牌了;
if(cha>d[j].num-b){
cha=d[j].num-b;
now=j;
}
}
}
}
//接下来是我对尝试着对不出牌情况的一个整理,然而并没用。。
//int cha2=-1;
//int candy1=candy-c;
//int candy2=candy;
//int noww;
/*for(int i=1;i<=n;i++){//枚举小D的牌
if(a>=d[i].num){
if(d[i].huase==a&&!d[i].vis&&cha2<a-d[i].num){
candy2=candy2-c+d[i].num;
noww=i;
}
}
}
if(candy1>candy2){
candy=candy1;
ans[nnow]=-1;
nnow++;
}
else{
ans[nnow]=noww;
nnow++;
candy=candy2;
d[noww].vis=true;
}*/
if(!hua){//没有合适的花色,即没有出牌
candy=candy-c;
ans[nnow]=-1;
nnow++;
}
if(hua&&!has){//如果出了牌但是没有其值大于b的牌
for(int i=1;i<=n;i++){//枚举小D的牌
if(d[i].huase==a&&!d[i].vis){
ans[nnow]=i;
nnow++;
candy=candy-c+d[i].num;
d[i].vis=true;
}
}
}
if(hua&&has){//已有合适的花色,则选了牌,就要进行操作
if(has){//合适的与a花色相同且其值大于b的牌
candy=candy+c+d[now].num;
}
d[now].vis=true;//已使用
ans[nnow]=now;
nnow++;
}
//cout<<now<<endl;
}
cout<<candy<<endl;
for(int i=1;i<nnow;i++) cout<<ans[i]<<endl;
return 0;
}
//后语:我太菜了,连T2都过不了。
//写了那么多,望多多指教qwq!谢谢!
感谢各位大佬!