NOIP 2012 Vijos 1787普及グループ宝探しシミュレーション
1797 ワード
Vijosでテストに成功しました.
テストデータ#0:Accepted,time=0 ms,mem=25284 KiB,score=10
テストデータ#1:Accepted,time=0 ms,mem=25284 KiB,score=10
テストデータ#2:Accepted,time=0 ms,mem=25280 KiB,score=10
テストデータ3:Accepted,time=54 ms,mem=25288 KiB,score=10
テストデータ#4:Accepted,time=89 ms,mem=25284 KiB,score=10
テストデータ#5:Accepted,time=589 ms,mem=25288 KiB,score=10
テストデータ#6:Accepted,time=628 ms,mem=25280 KiB,score=10
テストデータ#7:Accepted,time=593 ms,mem=25280 KiB,score=10
テストデータ#8:Accepted,time=800 ms,mem=25280 KiB,score=10
テストデータ#9:Accepted,time=824 ms,mem=25280 KiB,score=10
ちょっと遅いです.
シミュレーションすればいいです.
最初はcin/coutと型で5点を超えた.後でscanf/printfと減算に変えればよかったのに...(型というものは遅いですね)
大循環は各階を循環する.
それから案内板の和を計算します.
そして、その階をスキャンして階段を上り、配列に格納します.
そして型を押すと次の階段が見つかります.
循環すればいい.
テストデータ#0:Accepted,time=0 ms,mem=25284 KiB,score=10
テストデータ#1:Accepted,time=0 ms,mem=25284 KiB,score=10
テストデータ#2:Accepted,time=0 ms,mem=25280 KiB,score=10
テストデータ3:Accepted,time=54 ms,mem=25288 KiB,score=10
テストデータ#4:Accepted,time=89 ms,mem=25284 KiB,score=10
テストデータ#5:Accepted,time=589 ms,mem=25288 KiB,score=10
テストデータ#6:Accepted,time=628 ms,mem=25280 KiB,score=10
テストデータ#7:Accepted,time=593 ms,mem=25280 KiB,score=10
テストデータ#8:Accepted,time=800 ms,mem=25280 KiB,score=10
テストデータ#9:Accepted,time=824 ms,mem=25280 KiB,score=10
ちょっと遅いです.
シミュレーションすればいいです.
最初はcin/coutと型で5点を超えた.後でscanf/printfと減算に変えればよかったのに...(型というものは遅いですね)
大循環は各階を循環する.
それから案内板の和を計算します.
そして、その階をスキャンして階段を上り、配列に格納します.
そして型を押すと次の階段が見つかります.
循環すればいい.
#include <stdio.h>
#include <string.h>
using namespace std;
#define N 10005
#define M 105
typedef long long ll;
ll n, m, now, i, j;
ll up[N][M], card[N][M], louti[M], loutitot[N], lt[N][M];
ll mod(ll s, ll m) {
ll r = s;
while(r>=m) r-=m;
return r;
}
int main()
{
scanf("%lld%lld", &n, &m);
memset(loutitot,0,sizeof(loutitot));
for(i=1;i<=n;i++)
for(j=0;j<m;j++)
scanf("%d%d", &up[i][j], &card[i][j]);
scanf("%d", &now);
ll sum = 0;
for(i=1;i<=n;i++) {
sum = mod(sum+card[i][now],20123);
ll d = card[i][now];
ll k = 0;
for(j=now;j<m;j++)
if(up[i][j])
louti[++k] = j;
for(j=0;j<now;j++)
if(up[i][j])
louti[++k] = j;
d=mod(d,k);
if(d==0) d=k;
now=louti[d];
}
printf("%lld", sum);
return 0;
}