第七屆ACM趣味程式設計競賽第四場(正式賽) 題解

2021-09-07 04:24:40 字數 3633 閱讀 8202

final pan's prime numbers

給你n,要求你在[4,n]範圍內找到乙個最大的質數x,使得x-4和x+4也是質數

數學

只有7是滿足的

為什麼?

1、若 n = 3x,因為n>4,所以n必為合數,不符。

2、若 n = 3x + 1,

則 n - 4 = 3x - 3 = 3(x-1) ,即(n -4 ) % 3 == 0,有且只有n=7時滿足

3、若 m = 3x + 2,

則 n + 4 = 3x + 6 = 3 * (x+2),顯然n+4為合數,不符

所以n<7時輸出-1,n>=7時輸出7即可

**如下:

#includeusing namespace std;

int main()

zhangyu speech

給你n個數,m次詢問

每次詢問是這樣的:

輸入x將會構造出乙個新的序列,這個新的序列b[i] = a[x] - a[i] (i然後要求你計算出這個b序列中小於0的數的和sum1,大於0的數的和的絕對值sum2

如果sum1>sum2 輸出keep dis

如果sum1=sum2 輸出next time

如果sum1字首和

維護字首和,a[i][j]表示前i個數中,大小為j的數一共有多少個

然後我們就可以處理詢問了~

每次處理詢問的時候:

sum1+=a[x][j]*(s[x]-j) (s[x]>j的時候)

sum2+=a[x][j]*(j-s[x]) (s[x]然後掃一遍10個數就好了~

#includeusing namespace std;

int a[100001][11];

int n,m;

string s;

int main()

}

playfair

首先給你乙個密碼串,你需要通過這個密碼串生成5*5的密碼矩陣

這個密碼矩陣的構造方式如下:

這個矩陣依次填入密碼串的字元,如果密碼串中的字元出現了多次,只算第一次出現的那次。

密碼串中的j視作i,大寫視作小寫。

剩下沒有填滿的格仔,就按照字典序去填。

然後給你乙個串,你需要輸出加密後的串。

需要忽略除了字母的任何字元,空格。

加密方式如下:

我們首先把串分組,相鄰的兩個為一組,如果相鄰的兩個相同的話,就在這兩個之間插入乙個x。

分組之後,如果同組的元素都在同一行,就輸出右邊的,如果都在同一列,就輸出下面的,如果都不是,就輸出mp[l1][r2],mp[l2][r1]

模擬題

認真讀題之後,就沒什麼坑了。。。

模擬題多讀幾遍 t t(別問我為什麼

#includeusing namespace std;

int mp[10][10];

int vis[30];

int l[30];

int r[30];

string s,txt,temp,txt1;

int main()

for(int i=0;isearch gold

給你n行m列的矩陣,你一開始在(1,1)這個位置,如果你到某個格仔,你身上的權值就會加上a[i][j],如果你權值為負數,就會死掉

問你在保證不走出去,以及不死掉的情況下,權值最多為多少

一開始在(x,y),下一步可以走到(x+1,y)(x,y+1)(x+2,y+1)(x+1,y+2)

動態規劃

dp[i][j]表示走到當前格仔所能獲得的最大權值,很顯然dp[i][j]=max(dp[i-1][j],dp[i][j-1],dp[i-2][j-1],dp[i-1][j-2])+a[i][j]轉移過來的

稍微注意下,如果dp[x][y]為負數的話,就不要從這兒轉移過來就好了

#includeusing namespace std;

const long long inf = 9999999999999ll;

long long dp[1002][1002];

long long a[1002][1002];

int dx[5]=;

int dy[5]=;

int n,m;

int check(int x,int y)

int main()

dp[1][1]=a[1][1];long long ans = -1;

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

cout

有n個男孩子,n個女孩子,男孩子和女孩子可以組合在一起,組合一起的value = p[i] * v[i]

然後問你,一共有多少種組合,第乙個人的組合,能力值最高

暴力容斥

首先我們列舉每乙個女孩子和第乙個人組合的情況

然後列舉後面的熊孩子,對於每個熊孩子再數出一共有多少種組合比他厲害,就可以暴力容斥了~

#includeusing namespace std;

#define maxn 120

const int mod = 1e9 + 7;

long long a[maxn];

long long b[maxn];

long long c[maxn];

bool cmp(int a,int b)

int main()

tmp = tmp + 2 - j;

if(tmp<=0)

ans2 = (ans2 * tmp)%mod;

}if(flag==0)

ans = (ans + ans2)%mod;

}printf("%d\n",ans);

}

open the lightings

給你n棧燈,一開始只有第m盞燈是亮著的。

然後你可以開啟第i盞燈,如果第j盞燈是亮著的,而且abs|j-i|<=2

然後問你一共有多少種方式能夠開啟所有燈

動態規劃

f[n]表示開了n盞燈的方案數,則f[n]=(f[n-2])*(n-1)+f[n-1]。

由於第一盞燈的兩方相互不影響,設i為最初的燈 則答案為f[i-1]f[n-i]c(n-1,i-1)

#include#include#include#include#define ll long long

using namespace std;

const ll oo=1000000007;

ll n,m,i,j,c[1111][1111],b[1111],ans;

int main()

b[1]=1;b[2]=2;

for(i=3;i<=n;++i)

if(m==n||m==1)

c[0][0]=1;

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

ans=((b[m-1]*b[n-m])%oo*c[n-1][m-1])%oo;

printf("%i64d\n",ans);

return 0;

}

第七屆ACM趣味程式設計競賽第四場(正式賽) 題解

給你n,要求你在 4,n 範圍內找到乙個最大的質數x,使得x 4和x 4也是質數 數學 只有7是滿足的 為什麼?1 若 n 3x,因為n 4,所以n必為合數,不符。2 若 n 3x 1,則 n 4 3x 3 3 x 1 即 n 4 3 0,有且只有n 7時滿足 3 若 m 3x 2,則 n 4 3x...

山東省第七屆ACM程式設計競賽

sdutoj 3560 3570 水題 include include define mem a,x memset a,x,sizeof a using namespace std typedef long long ll const int n 100010 int a 5 int main re...

第七屆福建省程式設計競賽題解

a.best friend forever b.card game second edition include include include include include using namespace std int a 11111 int b 11111 int main for int ...