题意: 掷n次筛子,每次数字打的赢,问最后谁赢。
思路:简单模拟。
AC代码:
#include <bits/stdc++.h>
#define mod 1000000007
#define ll long long
using namespace std;
int n,m;
int main(){
// freopen("1.in","r",stdin);
int n;
scanf("%d",&n);
int a=0,b=0;
for(int i=1;i<=n;i++) {
int x,y; scanf("%d%d",&x,&y);
if(x==y) continue;
if(x>y) a++;
else b++;
}
if(a == b) printf("Friendship is magic!^^\n");
else if(a>b) printf("Mishka\n");
else printf("Chris\n");
return 0;
}
B. Mishka and trip
题意:n个城市,每个城市都有一个值,一开始1-2-3—n,n和1相连,相连的路上的值为相连两个点的值得积,k次操作,每次操作是把x其他所有的点和x相连,求最后的总的值。
思路:当时没写出来,看了一眼别人的代码,懂了。具体看代码。
AC代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <map>
#include <cmath>
#include <string>
#include <stack>
#include <queue>
#include <vector>
#include <set>
const int mod = 1e9+7;
#define ll long long
#define llu unsigned long long
using namespace std;
map<string,int>mp;
const int maxn = 100550+10;
const double ep = 2.2360679775;
int v[maxn],a[maxn];
int main(){
ios::sync_with_stdio(false);
int n,k;
cin>>n>>k;
ll s = 0,sum=0;
for(int i=1;i<=n;i++) {
cin>>a[i];
sum += a[i];
}
for(int i=2;i<=n;i++) {
s+=(a[i]*a[i-1]);
}
s += a[1]*a[n];
for(int i=1;i<=k;i++) {
int x; cin>>x;
sum -= a[x];
v[x] = 1;
s += (sum*a[x]);
int l,r;
if(x==1) {
l = n;
r = 2;
}
else if(x==n) {
l = n-1;
r = 1;
}else{
l = x-1;
r = x+1;
}
if(!v[l]) s -= (a[x]*a[l]);
if(!v[r]) s -= (a[x]*a[r]);
}
cout<<s<<endl;
return 0;
}
第三题,自己太菜了还没有搞懂,
其他题更不会了,
真是太菜了。