HDNOIP201202计算余数

试题描述

    对于输入的2n个数据组成的序列,交替进行“删除头端元素”和“将头端元素移至尾端”的操作,直至序列为空。按照元素删除的先后顺序得到了一个与输入顺序不同的新序列,在新序列的相邻元素间依次插入“*”、“+”、“*”、“+”、……,然后求出此算式的结果除以2012的余数。下面是一个n=3的实例:
    输入序列 1 3 5 2 4 6
    删除头端1,剩下 3 5 2 46
    头端3移至尾端变为 5 24 6 3
    删除头端5,剩下 2 4 6 3
    头端2移至尾端变为 4 63 2
    删除头端4剩下 6 3 2
    头端6移至尾端变为 3 26
    删除头端3剩下 2 6
    头端2移至尾端变为 6 2
    删除头端6剩下 2
    头端2移至尾端变为 2
    删除头端2,序列已空
    得到新序列并插入乘号和加号后变为算式:1*5+4*3+6*2,用算式的结果29除以2012余数为29。你的任务是编写代码,由输入的n和2n个数,求出最后的余数。

输入
第一行是n。下面是2n个小于1000000的正整数。
输出
输出一个整数即题目所求的余数。
输入示例
3
1 3 5 2 4 6
输出示例
29
其他说明
60%的数据 n<5,100%的数据 n<100
 

用队列做。

 1 #include <iostream>
 2 #include <queue>
 3 using namespace std;
 4 queue<int> Q;
 5 int a[101];
 6 int main()
 7 {
 8     int n;
 9     int temp;
10     scanf("%d",&n);
11     for(int i=1;i<=2*n;i++) {scanf("%d",&temp);Q.push(temp);}
12     for(int i=1;i<=2*n;i++)
13     {
14         a[i]=Q.front();
15         Q.pop();
16         temp=Q.front();
17         Q.pop();
18         Q.push(temp);
19     }
20     int ans=0;
21     for(int i=1;i<=2*n;i+=2) {ans+=a[i]*a[i+1];ans=ans%2012;}
22     printf("%d",ans);
23     system("pause");
24     return 0;
25 } 
HDNOIP201202计算余数
原文地址:https://www.cnblogs.com/YXY-1211/p/5169168.html