1760 - 射击竞赛 X (无数据)
射击竞赛
【题目描述】
射击的目标是一个由R*C(2≤R≤C≤1000)个小方格组成的矩形网格。每一列恰有2个白色的小方格和R-2个黑色的小方格。行从顶至底编号为1-
R,列从左至右编号为1-C。射击者可射击C次。在连续的C次射击中,若每列恰好有一个白色的方格被射中,且不存在无白色方格被射中的行,这样的射击才是
正确的。如果存在正确的射击方法,则要求找到它。
【输入】 输入第一行为R,C,后面R行每行C个数,如果为0则为白格,1则为黑格
【输出】输出正确方案——每行两个数即射击坐标,否则输出-1
Input
Output
Examples
Input
Output
Solution C++
#include<cstdio> #include<algorithm> using namespace std; struct p { int num; int pr; }a[1005]; int comp(const p &a,const p &b) { if(a.pr<b.pr)return 1; else return 0; } int main() { int m,n; scanf("%d%d",&m,&n); for(int i=1;i<=n;++i) scanf("%d%d",&a[i].pr,&a[i].num); sort(a+1,a+n+1,comp); int i=0,ans=0; while(m>0) { ++i; if(m>=a[i].num) { ans+=a[i].num*a[i].pr; m-=a[i].num; continue; } if(m<=a[i].num) { ans+=m*a[i].pr; m=0; continue; } } printf("%d",ans); return 0; }