倒计时86天

[NOIP2015]求和 (nowcoder.com)

1.超时了啊啊啊:(50/100)

#include
using namespace std;
const int N=5e6+5;
const int inf=0x3f3f3f3f;
#define int long long
int a[N],b[N];
void solve()
{
    int n,m,sum=0;
    cin>>n>>m;
    for(int i=0;i>a[i];
    }
    for(int i=0;i>b[i];
    }
    for(int i=0;i

2.还超时:(90/100)

#include
using namespace std;
const int N=1e6+5;
const int inf=0x3f3f3f3f;
#define int long long
int a[N];
vectorve1[N],ve2[N];
void solve()
{
    int n,m,sum=0;
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=n;i++)
    {
        int b;
        cin>>b;
        if(i&1)ve1[b].push_back(i);
        else ve2[b].push_back(i);
    }
    for(int i=1;i<=m;i++)
    {
        if(ve1[i].size()>1)
        {
            for(int j=0;j1)
        {
            for(int j=0;j

3。终于!!(100/100)

#include 
using namespace std;
#define int long long
const int N = 4e5 + 4;
const int mod = 10007;
const int inf = 0x3f3f3f3f;

struct Node {
	int poistion, size, color;
} node[N];
vectorve[N][2];

void solve() {
	int n, m, sum = 0;
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> node[i].size;
		node[i].poistion = i;
	}
	for (int i = 1; i <= n; i++) {
		cin >> node[i].color;
		int a = node[i].color;
		ve[a][i & 1].push_back(node[i]); //按奇偶分类放在vector里面
	}
	for (int i = 1; i <= m; i++) {
		for (int j = 0; j < 2; j++) {
			int sum1 = 0, sum2 = 0, sum3 = 0;
			if (ve[i][j].size() < 2)
				continue;//某种颜色在奇数或偶数时只有一个
            //奇数或偶数时某种颜色由于出现>=2次,所以一定存在满足条件的3点
			/*
			假设有一个条带:位置1,3,5的颜色一样,则有(1,3),(3,5),(1,5)
			题目意思要求(位置1+位置2)*(大小1+大小2)
			所以:(位置1+位置3)*(大小1+大小3)+(位置3+位置5)*(大小3+大小5)+(位置1+位置5)*(大小1+大小5)
			乘开:位置1*大小1+位置2*大小2+位置3*大小3+(位置1+位置2+位置3)*(大小1+大小2+大小3)
			*/
			for (auto &it : ve[i][j]) {
				sum1 += it.poistion; //奇数或偶数时某种颜色所在位置和
				sum2 += it.size; //奇数或偶数时某种颜色大小和
				sum3 = (sum3 + it.poistion * it.size) % mod; //奇数或偶数时某种颜色对应的位置乘以大小和
			}
			sum = (sum + (sum1 % mod) * (sum2 % mod) + ((ve[i][j].size() - 2) * sum3)) % mod;
		}
	}
	cout << sum;
}

signed main() {
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	solve();
	return 0;
}

//不明白,我一个菜鸡为什么要碰这道题,啊啊啊啊啊啊啊啊啊啊啊,终于对了>-<

你可能感兴趣的:(c++)