2019寒假訓練賽07解題報告

2021-09-10 22:18:22 字數 3169 閱讀 4619

a - candy division gym - 101597c

題意:你有n塊糖要分給三個小朋友,要求每個小朋友分到的數量可以被n整除,任意輸出一種情況,如果不能則輸出impossible。

題解:由題意,得出n=n/x+n/y+n/z,即1=1/x+1/y+1/z,滿足此公式只有3 3 3或者2 4 4的組合。所以只要判斷n能否被3或者4整除即可。

#include#includeusing namespace std;

int main()

else if(n%3==0)

else if(n%4==0)

}}

c - leading and trailing lightoj - 1282

題意:給出n和k,求n ^ k的前三位和後三位(資料保證n^k在6位以上)。

題解:對於n 我們可以表示成10 ^ m(m為小數),n ^ k則為10 ^ (m * k),這時我們對兩邊取log10,得到k*log10(n)=k * m,k和m可以表示成整數部分和小數部分,整數部分表示位數,小數部分表示值。我們可以通過讓小數部分乘上100,來得到前3位數字。後三位快速冪取模即可。

#include#include#includeusing namespace std;

long long ksm(long long a,long long b,long long c)

return ans;

}int main()

return 0;

}

d - ehab and another construction problem codeforces - 1088a

題意:給出乙個數x,問是否存在a,b滿足①1<=a,b<=x,②a被b整除,③a*b>x,④a/b題解:x<=100,列舉即可。

e - ehab and subtraction codeforces - 1088b

題意:給你n個數,進行k次操作,每次操作輸出當前最小的非0數字x,再將序列中的非0數都減去x,若都為0則輸出0。

題解:先去重,再將這些數從小到大排序,每次輸出當前數減去前乙個數。

#include#include#includeusing namespace std;

long long a[100000+10];

int main()

sort(a+1,a+n+1);

int now=0;

for(int i=1;i<=n;i++)

if(now==k)

}for(int i=now+1;i<=k;i++)

}

f - ehab and a 2-operation task codeforces - 1088c

題意:給你一段序列,你可以執行兩種操作。1 i x 表示將前i個位置加上x,2 i x表示將前i個位置模x,問你能否在n+1次操作內序列嚴格遞增,輸出所有操作。

ps:大數不要超過1e6,否則不給你過。

#include#includeusing namespace std;

const int maxn=1e6;

int main()

printf("%d\n",n+1);

printf("2 %d 1\n",n);

printf("1 %d %d\n",n,maxn);

for(int i=1;ig - acm gym - 101597k

題意:給你乙個字串,若存在字串acm則輸出fun!,否則輸出boring…。

題解:字串的find函式

h - throwing balls into the baskets lightoj - 1317

題意:有n個人,m個籃球框,每個人投k次球,每次投中的概率是p,問最後理論上共投進多少個球。

題解:所以這題和籃筐數有什麼關係?

#include#includeusing namespace std;

int main()

return 0;

}

i - semi-prime h-numbers poj - 3292

題意:我們稱可以分成4*n+1的數為h數,其中當且僅當有兩個h數相乘得到的h數為h-質數,25=5 * 5是h-質數,而125 = 25 * 5 = 5 * 5 * 5所以不是h-質數。現在問你在n以內有多少h-質數。

題解:我們先用埃氏篩將所有h-質數篩出來,因為h-質數的倍數一定不是h-質數(肯定有很多多餘的工作),然後統計1e7+1以內的h-質數即可。

#include#includeusing namespace std;

bool p[1000000+10];

int a[1000000+10];

const int maxn=1000000+1;

int ans[1000000+10];

int sum[1000000+10];

int main()

int cnt=0;

for(int i=1; i*4+1<=maxn; i++)}}

for(int i=1;i<=cnt;i++)

else}}

for(int i=1;i<=maxn;i++)

int n;

while(scanf("%d",&n)!=eof)

}

j - goldbach`s conjecture lightoj - 1259

題意:根據哥德**猜想,任意乙個大於2的偶數都可以分成兩個質數和,現在給出乙個偶數,問有多少個質數對滿足哥德**猜想。

題解:列舉所有質數,然後驗證(n-當前質數)是否也是質數。然而我想列舉+二分結果t了(質數都篩出來了我還找他做什麼┭┮﹏┭┮)。

#include#include#include#includeusing namespace std;

bool p[20000000+10];

int a[2000000+10];

int main()}}

}int t;

scanf("%d",&t);

for(int k=1;k<=t;k++)}}

if(ans%2==0)

else

printf("case %d: %d\n",k,ans);

}}

寒假訓練1 17訓練賽J

題目大意 有n個孩子 編號號1 n 3 n 2 10 5 手拉手圍成乙個圈。按順時針方向 給出編號為i的孩子的後面兩個孩子的編號ai1,ai2 但你不清楚i後面乙個孩子的編號是ai1還是ai2 求這個圈的孩子編號的順序 以任意孩子開頭輸出一種即可 解題思路 將給出的ai1與ai2相連可以得到這個環,...

2016 1 26寒假訓練賽1

2016.1.26寒假訓練賽1 a a mathematical curiosity 按照題意,暴力列舉過去,統計結果即可 b tempter of the bone 搜尋入門題目,按最簡單的方式寫即可 c r n 1.特殊處理a和b中有乙個為0的情況,如果成立的話,結果增加4 2.其他的情況,先考...

寒假訓練賽 I題

題目鏈結 題目大意 給出乙個n和k,計算出n由k個2 p p z 相加而成,求這k個數的組合。思路 先算出n的二進位制形式,然後計算二進位製上有幾個1,記為p,並將每個是1的位置對應十進位制的數由大到小存入佇列中,p是組合成n的最小個數以及佇列的size,如果n include include in...