3783 NOIP2014模擬8 19 簽到題

2021-10-02 02:35:42 字數 1694 閱讀 5484

給定n個數,求出這n個數的乙個非空子集,使得這個子集中的數的和能被n整除,無解輸出-1.

第一行為資料組數t

接下來t組資料,每組資料第一行為乙個正整數n,第二行為n個用空格分開的數。

對於每一組資料,如果無解輸出一行乙個整數-1;否則第一行輸出乙個正整數m,表示子集的大小,然後在第二行輸出m個數,分別是這個子集中的數。如果有多種方案,輸出任意一種。

1

11

1

1

對於30%的資料  n<=20

對於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...