結果
| 問題 |
No.5002 stick xor
|
| コンテスト | |
| ユーザー |
tails
|
| 提出日時 | 2018-05-27 23:25:56 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 8 ms / 1,000 ms |
| コード長 | 1,859 bytes |
| コンパイル時間 | 1,578 ms |
| 実行使用メモリ | 1,384 KB |
| スコア | 44,639 |
| 最終ジャッジ日時 | 2018-05-27 23:25:59 |
|
ジャッジサーバーID (参考情報) |
judge8 / |
| 純コード判定しない問題か言語 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 32 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:19:5: warning: ‘char* gets(char*)’ is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations]
gets(a[y]+1);
^
main.cpp:19:16: warning: ‘char* gets(char*)’ is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations]
gets(a[y]+1);
^
/tmp/ccDK5fH5.o: In function `main':
main.cpp:(.text.startup+0x94): warning: the `gets' function is dangerous and should not be used.
ソースコード
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
int n,k;
int lc[26],li[26][500];
int ra[500],rb[500],rc[500],rd[500];
char a[64][64];
main(){
scanf("%d%d",&n,&k);
for(int i=0;i<k;++i){
int l;
scanf("%d ",&l);
li[l][lc[l]++]=i;
}
for(int y=1;y<=n;++y){
gets(a[y]+1);
for(int x=1;x<=n;++x){
a[y][x]&=1;
}
}
for(int m=0;m<5;++m){
for(int y=2;y<=n-1;++y){
int bl=0,bx=0;
double bv=10.0;
for(int x=1;x<=n;++x){
int v=0;
for(int l=0;l<25&&x+l<=n;++l){
v+= a[y][x+l]!=a[y-1][x+l] ? 1 : -0.82;
v+= a[y][x+l]!=a[y+1][x+l] ? 1 : -0.82;
if(bv<v){
bv=v; bx=x; bl=l+1;
}
}
}
if(bx){
if(lc[bl]){
int i=li[bl][--lc[bl]];
ra[i]=y;
rb[i]=bx;
rc[i]=y;
rd[i]=bx+bl-1;
for(int l=0;l<bl;++l){
a[y][bx+l]^=1;
}
}
}
}
}
for(int z=1;z<=n;++z){
for(int x=1;x<=n;++x) {
if(a[z][x]){
int bl=0,bv=1,v=0;
bv=z+1>=n+1||a[z+1][x]?1:z<2?3:3;
for(int l=0;l<25&&z+l<=n;++l){
v+=a[z+l][x]*5-1;
int v1=0;
if(a[z+l][x]&&!a[z+l+1][x]) v1=2;
if(!a[z+l][x]&&a[z+l+1][x]) v1=1;
if(bv<=v1&&lc[l+1]){
bv=v1;
bl=l+1;
}
}
if(bl){
int i=li[bl][--lc[bl]];
ra[i]=z;
rb[i]=x;
rc[i]=z+bl-1;
rd[i]=x;
for(int l=0;l<bl;++l){
a[z+l][x]^=1;
}
}
}
}
}
for(int l=1;l<=25;++l){
while(lc[l]){
int i=li[l][--lc[l]];
ra[i]=1;
rb[i]=1;
rc[i]=1;
rd[i]=l;
}
}
for(int i=0;i<k;++i){
printf("%d %d %d %d\n",ra[i],rb[i],rc[i],rd[i]);
}
}
tails