給定n個數,求出這n個數的乙個非空子集,使得這個子集中的數的和能被n整除,無解輸出-1.
第一行為資料組數t
接下來t組資料,每組資料第一行為乙個正整數n,第二行為n個用空格分開的數。
對於每一組資料,如果無解輸出一行乙個整數-1;否則第一行輸出乙個正整數m,表示子集的大小,然後在第二行輸出m個數,分別是這個子集中的數。如果有多種方案,輸出任意一種。
111
1對於30%的資料 n<=201
對於50%的資料 n<=100
對於70%的資料 n<=1000
對於100%的資料 n<=100000,t<=10
我們可以證明取連續的一段區間是可以滿足要求的。
取每一位的字首和,加上0一共有n+1項,當每一位上的數都模上n後的取值只有0~n-1一共n中,因此必定有一種重複,取兩個重複的端點相減的差一定能整除n。
因此,我們對於每個位置上的數記錄在乙個桶中,當有出現重複時取這個區間的數就可以了。
當然,你也可以用2^n暴力做這道題。
#include#include#include#include#define i int
#define ll long long
#define f(i,a,b) for(register i i=a;i<=b;i++)
#define fd(i,a,b) for(register i i=a;i>=b;i--)
#define mem(a,b) memset(a,b,sizeof(a))
#define n 100010
using namespace std;
void rd(i &x)
while(ch>='0'&&ch<='9')
x*=w;
}i t,n,a[n],ans[n],bz[n];
void dg(i x,ll sum,i tot)
if(x>n) return;
if(!bz[0])
if(!bz[0]) dg(x+1,sum,tot);
}i main()
} return 0;
}
#include#include#include#include#define i int
#define ll long long
#define f(i,a,b) for(register i i=a;i<=b;i++)
#define fd(i,a,b) for(register i i=a;i>=b;i--)
#define mem(a,b) memset(a,b,sizeof(a))
#define n 100010
using namespace std;
void rd(i &x)
while(ch>='0'&&ch<='9')
x*=w;
}i t,n,x,a[n],b[n],c[n],l,r;
i main()
f(i,1,n)
if(b[a[i]])
b[a[i]]=i;
} printf("%d\n",r-l+1);
f(i,l,r) printf("%d ",c[i]);
printf("\n");
} return 0;
}
NOIP模擬測試8
hz怎麼老考試啊23333 考試前一天占個坑。給自己的忠告 想不出正解就別想了,暴力打滿rank就不會難看qaq 華麗的分割線 考完了,rank14,我又boomboomboom了orz 最後t3的暴力還是沒打出來,我就是個想不出正解還要ning想的dd 我是sb 一眼kmp,剛正不阿的cwy不會忘...
noip2014 螺旋矩陣 (模擬)
p1913螺旋矩陣 accepted 標籤 noip普及組2014 乙個 n 行 n 列的螺旋矩陣可由如下方法生成 從矩陣的左上角 第 1 行第 1 列 出發,初始時向右移動 如果前方是未曾經過的格仔,則繼續前進,否則右轉 重複上述操作直至經過矩陣中所有格仔。根據經過順序,在格仔中 依次填入 1,2...
NOIP2014模擬11 3 蛋糕
今天是bessie的生日,他買了乙個蛋糕和朋友們一起分享,蛋糕可以看成是乙個r行c列的 共有r c個格仔,每個格仔都有乙個0至9的數字,表示該格仔蛋糕擁有的巧克力。現在bessie要把蛋糕橫的切3刀再豎的切3刀,由於bessie刀法厲害,所以每個格仔蛋糕都是完整的,顯然蛋糕會被切成16份,然後bes...