QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#454005 | #8818. Colorful Graph 3 | csy2005 | WA | 6ms | 5980kb | C++14 | 5.9kb | 2024-06-24 15:35:24 | 2024-06-24 15:35:26 |
Judging History
answer
#include <iostream>
#include <algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<vector>
#include<iomanip>
#include<ctime>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<bitset>
#include<cassert>
#include<random>
#define sqr(x) ((x)*(x))
#define fz1(i,n) for ((i)=1;(i)<=(n);(i)++)
#define fd1(i,n) for ((i)=(n);(i)>=1;(i)--)
#define fz0g(i,n) for ((i)=0;(i)<=(n);(i)++)
#define fd0g(i,n) for ((i)=(n);(i)>=0;(i)--)
#define fz0k(i,n) for ((i)=0;(i)<(n);(i)++)
#define fd0k(i,n) for ((i)=(((long long)(n))-1);(i)>=0;(i)--)
#define fz(i,x,y) for ((i)=(x);(i)<=(y);(i)++)
#define fd(i,y,x) for ((i)=(y);(i)>=(x);(i)--)
#define fzin fz1(i,n)
#define fzim fz1(i,m)
#define fzjn fz1(j,n)
#define fzjm fz1(j,m)
#define ff(c,itr) for (__typeof((c).begin()) itr=(c).begin();itr!=(c).end();++itr)
#define pb push_back
#define mk make_pair
#define rdst(st,len){static char ss[len];scanf(" %s",ss);(st)=ss;}
#define spln(i,n) (i==n?'\n':' ')
#define fac_init(n){fac[0]=fac[1]=inv[1]=fi[0]=fi[1]=1;fz(i,2,n){fac[i]=1ll*fac[i-1]*i%mod;inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;fi[i]=1ll*fi[i-1]*inv[i]%mod;}}
using namespace std;
typedef long long i64;
typedef long double f80;
typedef unsigned int u32;
typedef unsigned long long u64;
//typedef __int128 i128;
//typedef unsigned __int128 u128;
/*#ifndef ONLINE_JUDGE
FILE *___=freopen(".in","r",stdin);
#endif*/
inline void read(int &x)
{
char c;int f=1;
while(!isdigit(c=getchar()))if(c=='-')f=-1;
x=(c&15);while(isdigit(c=getchar()))x=(x<<1)+(x<<3)+(c&15);
x*=f;
}
int t,n,m,i,j;
vector<int> v0,v1;
vector<pair<pair<int,int>,int> > ans;
int lx,ly;
int id(int x,int y)
{
return (y-1)*lx+x;
}
void solve2()
{
int mi=ans.size(),i,j,k,s=0;
fz1(i,n){
j=n/i;
while(i*j<n) j++;
if(i>j) break;
int t=n+n-i-j;
if(i*2>j||(i*2==j&&i*j==n)){
if(t<mi){
mi=t;
s=i;
}
}
}
if(!s) return;
i=s;j=n/i;
while(i*j<n) j++;
lx=i;ly=j;
ans.clear();
fz1(i,ly){
int p=id(max(1,lx-i+1),i);
fz1(j,lx){
int q=id(j,i);
if(q==p) continue;
if(q>n) break;
ans.push_back(make_pair(make_pair(p,q),v1[0]));
}
}
int c=0,x=1,ty=ly;
if(lx*ly!=n){
fz1(i,ly-1){
int p=id(1,i);
int q=id(1,ly);
ans.push_back(make_pair(make_pair(p,q),v1[1]));
}
fz(i,2,lx){
int p=id(i,ly);
if(p<=n){
int q=id(i,1);
ans.push_back(make_pair(make_pair(p,q),v1[1]));
}
}
x++;
ty--;
}
while(x<=lx){
c++;c=min(c,ly);
int l=c,r=c,flg=0;
fz1(j,ty-1){
if(flg){
l--;
if(l==0) l=ty;
}
else{
r++;
if(r==ty+1) r=1;
}
ans.push_back(make_pair(make_pair(id(x,l),id(x,r)),v1[1]));
flg^=1;
}
x++;
}
assert(ans.size()==mi);
}
int lst[500005],cnt;
void solve3()
{
int mi=ans.size(),i,j,k,s=0;
fz1(i,n){
int t=n+n-i-1;
if(1ll*i*(i-1)/2<=n-1){
if(t<mi){
mi=t;
s=i;
}
}
}
if(!s) return;
ans.clear();
lx=s;
cnt=lx;
fz1(i,lx) lst[i]=i;
fz(i,2,lx){
ans.push_back(make_pair(make_pair(lst[1],lst[i]),v1[0]));
}
fz(i,2,lx){
fz(j,i+1,lx){
cnt++;
ans.push_back(make_pair(make_pair(lst[j],cnt),v0[0]));
lst[j]=cnt;
ans.push_back(make_pair(make_pair(lst[i],cnt),v1[0]));
}
}
while(++cnt<=n){
ans.push_back(make_pair(make_pair(1,cnt),v0[0]));
ans.push_back(make_pair(make_pair(1,cnt),v1[0]));
}
assert(ans.size()==mi);
}
int a[1005][1005];
void solve4()
{
int mi=ans.size(),i,j,k,s=0;
j=n;
fz1(i,n){
while(j>=i&&((1ll*i*(i-1)/2>n-j)||(1ll*j*(j-1)/2>n-i))) j--;
if(j<i) break;
int t=n+n-i-j;
if(t<=mi){
mi=t;
s=i;
}
}
if(!s) return;
ans.clear();
i=s;j=n;
while(j>=i&&((1ll*i*(i-1)/2>n-j)||(1ll*j*(j-1)/2>n-i))) j--;
lx=i;ly=j;
if(lx==ly){
cnt=0;
fz1(i,lx)fz1(j,i){
a[i][j]=++cnt;
}
fz1(i,lx){
fz(j,i+1,lx){
ans.push_back(make_pair(make_pair(a[i][i],a[j][i]),v1[0]));
}
}
fz1(i,lx){
fz1(j,i-1){
ans.push_back(make_pair(make_pair(a[i][i],a[i][j]),v1[1]));
}
}
while(cnt<n){
cnt++;
ans.push_back(make_pair(make_pair(1,cnt),v1[0]));
ans.push_back(make_pair(make_pair(1,cnt),v1[1]));
}
}
else if(lx+1==ly){
assert(n==1ll*ly*(ly+1)/2-1);
cnt=0;
fz1(i,lx)fz1(j,i+1){
a[i][j]=++cnt;
}
assert(cnt==n);
fz1(i,lx+1){
fz(j,max(2,i),lx){
ans.push_back(make_pair(make_pair(a[max(1,i-1)][i],a[j][i]),v1[0]));
}
}
fz1(i,lx){
fz1(j,i){
ans.push_back(make_pair(make_pair(a[i][i+1],a[i][j]),v1[1]));
}
}
}
else assert(1064==822);
assert(ans.size()==mi);
}
int main()
{
read(t);
while(t--){
read(n);read(m);
v0.clear();v1.clear();ans.clear();
int id=0;
fz1(i,m){
int x;read(x);
if(x==0)v0.push_back(i);
if(x==1)v1.push_back(i);
if(x>1) id=i;
}
if(id){
printf("%d\n",n-1);
fz(i,2,n){
printf("%d %d %d\n",1,i,id);
}
continue;
}
if(v1.size()+1>=n){
printf("%d\n",n-1);
fz(i,2,n){
printf("%d %d %d\n",1,i,v1[i-2]);
}
continue;
}
int cur=1,fir=1;
while(cur<n){
int lst=1;
if(fir){
fir=0;
ff(v1,it){
if(cur<=n){
cur++;
ans.push_back(make_pair(make_pair(lst,cur),*it));
lst=cur;
}
}
ff(v1,it){
if(cur<=n){
cur++;
ans.push_back(make_pair(make_pair(lst,cur),*it));
lst=cur;
}
}
}
ff(v0,it){
if(cur<=n){
cur++;
ans.push_back(make_pair(make_pair(lst,cur),*it));
lst=cur;
}
}
ff(v1,it){
if(cur<=n){
cur++;
ans.push_back(make_pair(make_pair(lst,cur),*it));
lst=cur;
}
}
ans.back().first.second=1;
cur--;
}
if(v1.size()==2&&v0.size()==0){
solve2();
solve4();
}
if(v1.size()==1&&v0.size()==1){
solve3();
}
printf("%d\n",(int)ans.size());
ff(ans,it){
printf("%d %d %d\n",it->first.first,it->first.second,it->second);
}
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 5876kb
input:
3 4 2 1 1 2 2 0 0 5 2 3 1
output:
4 1 2 1 3 2 2 1 4 1 1 4 2 2 1 2 1 2 1 2 4 1 2 1 1 3 1 1 4 1 1 5 1
result:
ok orz (3 test cases)
Test #2:
score: -100
Wrong Answer
time: 6ms
memory: 5980kb
input:
4645 2 2 0 0 2 2 0 1 2 2 1 1 3 2 0 0 3 2 0 1 3 2 1 1 3 3 0 0 0 3 3 1 0 0 3 3 1 0 1 3 3 1 1 1 4 2 0 0 4 2 1 0 4 2 1 1 4 3 0 0 0 4 3 0 0 1 4 3 0 1 1 4 3 1 1 1 4 4 0 0 0 0 4 4 0 1 0 0 4 4 1 1 0 0 4 4 1 1 1 0 4 4 1 1 1 1 5 2 0 0 5 2 1 0 5 2 1 1 5 3 0 0 0 5 3 0 1 0 5 3 1 1 0 5 3 1 1 1 5 4 0 0 0 0 5 4 0 1...
output:
2 1 2 1 2 1 2 1 1 2 2 1 1 2 1 4 1 2 1 2 1 2 1 3 1 3 1 2 3 1 2 2 2 3 2 3 1 1 2 1 2 1 1 3 2 3 1 2 1 2 3 2 3 1 3 3 1 2 1 2 3 1 3 1 2 2 1 2 1 1 3 3 2 1 2 1 1 3 2 6 1 2 1 2 1 2 1 3 1 3 1 2 1 4 1 4 1 2 4 1 2 1 2 3 1 3 4 2 4 1 1 4 1 2 1 3 2 2 1 4 1 1 4 2 5 1 2 1 2 3 2 3 1 3 1 4 1 4 1 2 4 1 2 3 2 3 3 3 4 1 ...
result:
wrong answer your solution is suboptimal (test case 197)