結果
| 問題 |
No.506 限られたジャパリまん
|
| コンテスト | |
| ユーザー |
myanta
|
| 提出日時 | 2017-04-22 00:55:33 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 13 ms / 2,000 ms |
| コード長 | 1,427 bytes |
| コンパイル時間 | 515 ms |
| コンパイル使用メモリ | 52,736 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-06-28 04:14:41 |
| 合計ジャッジ時間 | 1,327 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 25 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:76:30: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
76 | scanf("%d%d%s", &fre[i].x, &fre[i].y, fre[i].name);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
struct fre_t
{
int x, y;
char name[20];
};
int w, h, k, p;
vector<vector<ll> > field;
vector<fre_t> fre;
void field_init(int w, int h)
{
field.clear();
field.resize(h+1);
for(int y=0;y<=h;y++)
{
field[y].resize(w+1);
}
}
void solve(ll& result, vector<int>& result_item, vector<int>& item)
{
do
{
field_init(w, h);
field[0][0]=1;
for(int i=0;i<k;i++)
{
if(item[i]==0) field[fre[i].y][fre[i].x]=-1;
}
for(int y=0;y<=h;y++)
{
for(int x=0;x<=w;x++)
{
if(field[y][x]<0) continue;
if(x>0 && field[y ][x-1]>=0) field[y][x]+=field[y ][x-1];
if(y>0 && field[y-1][x ]>=0) field[y][x]+=field[y-1][x ];
}
}
if(result<field[h][w])
{
result=field[h][w];
result_item=item;
}
}
while(next_permutation(item.begin(), item.end()));
}
int main(void)
{
ll result;
vector<int> result_item;
vector<int> item;
while(scanf("%d%d%d%d", &w, &h, &k, &p)==4)
{
fre.resize(k);
item.resize(k);
for(int i=0;i<k;i++)
{
scanf("%d%d%s", &fre[i].x, &fre[i].y, fre[i].name);
}
for(int i=0;i<k;i++)
{
item[i]=((k-i)<=p);
}
result=0;
result_item=item;
solve(result, result_item, item);
printf("%lld\n", result%1000000007);
if(result>0)
{
for(int i=0;i<k;i++)
{
if(result_item[i]) printf("%s\n", fre[i].name);
}
}
}
return 0;
}
myanta