题目链接:https://ac.nowcoder.com/acm/contest/22352
B:阿强的路
#include<iostream>
#include<algorithm>
#include<cstring>
#define int long long
using namespace std;
const int N = 505;
struct node {
int id, w;
bool operator < (const node& b)
{
return w < b.w;
}
}a[N];
int ew[N][N],f[N][N],pw[N];
signed main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
a[i].id = i;
cin >> a[i].w;
pw[i] = a[i].w;
}
memset(f, 0x3f, sizeof(f));
memset(ew, 0x3f, sizeof(ew));
for (int i = 1; i <= m; i++)
{
int u,v,w;
cin>>u>>v>>w;
ew[u][v]=ew[v][u]=w; // 最小化边权
f[u][v]=f[v][u]=ew[u][v]*max(pw[u],pw[v]);
}
sort(a + 1, a + 1 + n);
for (int k = 1; k <= n; k++)
{
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (ew[i][j] > max(ew[i][a[k].id],ew[a[k].id][j]))
{
ew[i][j]=ew[j][i] = max(ew[i][a[k].id], ew[a[k].id][j]);
f[j][i]=f[i][j]= min(f[i][j], ew[i][j] * max({ pw[i],pw[j],a[k].w }));
}
}
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <=n; j++)
{
if (i == j)
{
cout << 0 << " ";
continue;
}
if(ew[i][j]>1e9)
{
cout << "-1" << " ";
}
else cout << f[i][j] << " ";
if (j == n)
cout << endl;
}
}
}
C:传染病统计
#include<bits/stdc++.h>
using namespace std;
int n,t;
int sum;
int max1,min1;
int a[10];
int main(){
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
max1=0;
min1=10;
for(int i=1;i<=n;i++){
sum=1;
for(int j=i;j>1;j--){
if(a[j]-a[j-1]<=2)
sum++;
else
break;
}
for(int j=i;j<n;j++){
if(a[j+1]-a[j]<=2)
sum++;
else
break;
}
max1=max(max1,sum);
min1=min(min1,sum);
}
cout<<min1<<' '<<max1<<endl;
}
}
D:阿强与网络
#include<iostream>
using namespace std;
long long n, m, x, y;
int da, xiao, cha, yv, chu;
int min1(int x, int y)
{
if (x<y)
return x;
return y;
}
int max1(int x, int y)
{
if (x>y)
return x;
return y;
}
int main()
{
int t;
cin >> t;
while (t--)
{
scanf("%lld %lld %lld %lld", &n, &m, &x, &y);
int x2 = 2 * x, y2 = 2 * y;
int a = (min1(n, m) - 1)*y;
int b = 0;
xiao = min1(n, m);
da = max1(n, m);
cha = da - xiao;
yv = cha % 2;
chu = cha / 2;
if (n == 1 || m == 1)
{
printf("%lld\n", (da - 1)*x);
}
else if (x * 2<y)
{
printf("%lld\n", (n + m - 2)*x);
// cout<<(n+m-2)*x<<endl;
}
else
{
if (y<x)
{
b = chu * 2 * y + x*yv;
printf("%lld\n", a + b);
//cout<<b+a<<endl;
}
else
{
printf("%lld\n", cha*x + a);
//cout<<cha*x+a<<endl;
}
}
}
}
E:生活大爆炸
此题用Python写的
x=input()
d=[]
d=x.split(" ")
n=int(d[0])
m=int(d[1])
t=int(d[2])
a=[0 for i in range(0,789)]
a[0]=1
a[1]=1
for i in range(2,65):
a[i]=i*a[i-1]
sum=0
nan=min(t-1,n)
zuixiao=max(t-m,4)
for i in range(zuixiao,nan+1):
tea=a[n]/(a[n-i]*a[i])
tb=a[m]/(a[t-i]*a[m-t+i])
sum=sum+tea*tb
sum=int(sum)
print(sum)
F:Capslock
#include<bits/stdc++.h>
using namespace std;
int main(){
string a;
cin>>a;
int flag=0;
for(int i=1;i<a.size();i++){
if(i&&a[i]<='Z'&&a[i]>='A')
flag++;
}
if(flag==a.size()-1){
for(int i=0;i<a.size();i++){
if(a[i]<='Z'&&a[i]>='A')
a[i]+=32;
else
a[i]-=32;
}
}
cout<<a;
}
G:字节类型
此题也是用Python写的
= int(input())
if x <= 127 and x >= -128:
print("byte")
elif x <= 32767 and x >= -32768:
print("short")
elif x <= 2147483647 and x >= -2147483648:
print("int")
elif x <= 9223372036854775807 and x >= -9223372036854775808:
print("long")
else:
print("BigInteger")
I:完美主义
#include<iostream>
using namespace std;
const int M = 3e5 + 5;
int n, m, t;
struct s{
int l, r, sum;
};
int b[M+10];
s tree[4 * M+10];
int blid(int t, int ll, int rr){
tree[t].l = ll;
tree[t].r = rr;
if (ll == rr){
if (b[ll] <= b[ll + 1]){
tree[t].sum = 1;
return 1;
}
else{
tree[t].sum = 0;
return 0;
}
}
int mid = (ll + rr) / 2;
int aum1, aum2;
aum1 = blid(2 * t, ll, mid);
aum2 = blid(2 * t + 1, mid + 1, rr);
tree[t].sum = aum1 + aum2;
return tree[t].sum;
}
void gai(int t, int ll, int zhi){
tree[t].sum += zhi;
if (tree[t].l == tree[t].r){
return;
}
if (ll >= tree[t * 2].l&&ll <= tree[2 * t].r)
gai(2 * t, ll, zhi);
if (ll >= tree[t * 2 + 1].l&&ll <= tree[2 * t + 1].r)
gai(2 * t + 1, ll, zhi);
}
int cha(int t, int ll, int rr){
if (ll == tree[t].l&&rr == tree[t].r){
return tree[t].sum;
}
int aum1 = 0, aum2 = 0;
if (ll <= tree[2 * t].r)
aum1 = cha(2 * t, ll, rr);
if (rr >= tree[2 * t + 1].l)
aum2 = cha(2 * t + 1, ll, rr);
return aum1 + aum2;
}
int main(){
cin >> n >> m;
for (int i = 1; i <= n; i++){
cin >> b[i];
}
blid(1, 1, n - 1);
for (int i = 1; i <= m; i++){
int q, c, d;
cin >> q >> c >> d;
if (q == 1){
if (c>1){
if (b[c] >= b[c - 1] && d<b[c - 1]){
gai(1, c - 1, -1);
}
if (b[c]<b[c - 1] && d >= b[c - 1]){
gai(1, c - 1, 1);
}
}
if (c<n){
if (b[c] <= b[c + 1] && d>b[c + 1]){
gai(1, c, -1);
}
if (b[c]>b[c + 1] && d <= b[c + 1]){
gai(1, c, 1);
}
}
b[c] = d;
}
if (q == 2){
if (cha(1, c, d - 1) == (d - c))
cout << "Yes" << endl;
else
cout << "No" << endl;
}
}
}
J:放棋子
#include<bits/stdc++.h>
using namespace std;
const long long M =1e9+7;
long long dp[2][10010]={0};
long long a[110][110];
long long g[110][2];
long long n,m,t;
long long su(long long t1,long long mi){
long long flag=1;
while(mi){
if(mi%2)
flag=(flag*t1)%M;
t1=(t1*t1)%M;
mi>>=1;
}
return flag;
}
int main(){
cin>>n>>m>>t;
for(int i=0;i<=n;i++){
for(int j=0;j<=i;j++){
if(!j)
a[i][j]=1;
else
a[i][j]=(a[i-1][j-1]+a[i-1][j])%M;
}
}
for(int i=0;i<=n;i++){
g[i][0]=su(a[n][i],m/n);
g[i][1]=(g[i][0]*a[n][i])%M;
}
dp[0][0]=1;
for(long long i=1;i<=n;i++){
for(long long j=0;j<=min(i*n,t);j++){
for(long long k=0;k<=min(n,j);k++){
if(i<=(m%n))
dp[1][j]=(dp[1][j]+dp[0][j-k]*g[k][1])%M;
else
dp[1][j]=(dp[1][j]+dp[0][j-k]*g[k][0])%M;
}
}
for(long long j=0;j<=min(i*n,t);j++){
dp[0][j]=dp[1][j];
dp[1][j]=0;
}
}
cout<<dp[0][t]<<endl;
}
L:神奇的回答
#include<bits/stdc++.h>
using namespace std;
int main(){
int t,n;
cin>>t;
while(t--){
cin>>n;
if(n<=18)
cout<<n<<endl;
else
cout<<18<<endl;
}
}
M:比赛
#include<iostream>
#include<queue>
#include<map>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
map<char, int> mp;
int dis[505], vis[505];
vector<int> edge[505];
int cnt = 0;
int tme[505];
char s[505];
int in[505];
void spfa()
{
memset(vis, 0, sizeof(vis));
for (int i = 0; i <= cnt; i++)
{
dis[i] = -1e9;
}
dis[0] = 0;
queue<int> q;
q.push(0);
vis[0] = 1;
while (q.size())
{
int u = q.front(); q.pop(); vis[u] = 0;
for (int i = 0; i < edge[u].size(); i++)
{
int v = edge[u][i];
if (dis[v] < dis[u] + 1)
{
dis[v] = dis[u] + 1;
tme[v]++;
if (tme[v] > cnt)
{
printf("No Answer\n");
exit(0);
}
if (!vis[v])
{
vis[v] = 1;
q.push(v);
}
}
}
}
}
bool cmp(char x, char y)
{
return dis[mp[x]] < dis[mp[y]];
}
int main()
{
memset(in, 0, sizeof(in));
mp.clear();
int n;
scanf("%d\n", &n);
for (int i = 1; i <= n; i++)
{
char x, y, z;
scanf("%c:%c%c\n", &y, &x, &z);
if (x == y || x == z || y == z) {
printf("No Answer\n");
return 0;
}
if (!mp[y])
{
mp[y] = ++cnt;
s[cnt] = y;
}
if (!mp[x])
{
mp[x] = ++cnt;
s[cnt] = x;
}
if (!mp[z])
{
mp[z] = ++cnt;
s[cnt] = z;
}
edge[mp[x]].push_back(mp[y]);
in[mp[z]]++;
edge[mp[y]].push_back(mp[z]);
in[mp[y]]++;
}
int flag = 0;
for (int i = 1; i <= cnt; i++)
{
if (in[i] == 0)
{
flag=1;
edge[0].push_back(i);
in[i]++;
}
}
if (flag == 0)
{
printf("No Answer\n");
return 0;
}
spfa();
sort(s + 1, s + cnt + 1, cmp);
for (int i = 1; i <= cnt; i++)
{
printf("%c", s[i]);
}
return 0;
}