@[林空鹿饮溪](/space/show?uid=28563) 第一,新版Markdown换行需要空行
第二,麻烦把您的代码用代码块框起来,这样谁都看不见
by fbhou @ 2018-07-20 15:57:43
[点我学习Markdown](https://www.luogu.org/wiki/show?name=帮助:markdown)
by Melon_Musk @ 2018-07-20 16:08:30
@[fbhou](/space/show?uid=65589) 哦哦,谢谢提醒,没怎么用过讨论版
by 林空鹿饮溪 @ 2018-07-20 16:08:35
int n,m,ans=0;
struct node{
int color,num;
}a[100010];//记录读入数据
vector<int> color[100010];//给不同颜色的下标分类
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i].num;
for(int i=1;i<=n;i++)
cin>>a[i].color;//读入
for(int i=1;i<=n;i++)
color[a[i].color].push_back(i);//预处理
for(int i=1;i<=m;i++)//枚举颜色
for(int j=0;j<color[i].size();j++)//枚举x
for(int k=j+1;k<color[i].size();k++){//枚举z
int jj=color[i][j],kk=color[i][k];
if(jj<kk&&!((jj+kk)%2))//判断
ans=(ans+(jj%10007+kk%10007)%10007*(a[jj].num%10007+a[kk].num%10007)%10007)%10007;//求和
}
cout<<ans<<endl;//输出
return 0;
}
以上,TLE(80').中途出现了两个问题:
(1)一开始以为x&z不是下标,是方格里的值,那样每一行就可能是无序的,所以用了一个sort.后来把预处理的地方改对了,但是忘了删sort,再加上求余处理的不好,所以AC(40')+TLE(40')+WA(20'超出int范围,变为负);
(2)也是第一个问题衍生的.删除了sort以后,没有想到下标存入时,本来就是有序的,所以在判断时多加了一个if(jj<kk)的语句.后来优化程序的时候,注意到了这一点,就把这句话删掉了,于是,可怕的事情发生了——本来以为去了一个判断,就算不能再过一个点,也不会把原来得分的点丢掉,但事实就是这样的——TLE(80')->TLE(70')……(而且不止是一个点,有好几个点,都出现了优化前比优化后耗时少的情况)「·为什么少了一个判断,反而会耗时更长?待解答!·」
by 林空鹿饮溪 @ 2018-07-20 16:13:40
代码块内并不需要空行啊。。。用"```"框起来就好了
by fbhou @ 2018-07-20 16:28:12
@[fbhou](/space/show?uid=65589)
```cpp
int n,m,ans=0;
struct node{
int color,num;
}a[100010];//记录读入数据
vector<int> color[100010];//给不同颜色的下标分类
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i].num;
for(int i=1;i<=n;i++)
cin>>a[i].color;//读入
for(int i=1;i<=n;i++)
color[a[i].color].push_back(i);//预处理
for(int i=1;i<=m;i++)//枚举颜色
for(int j=0;j<color[i].size();j++)//枚举x
for(int k=j+1;k<color[i].size();k++){//枚举z
int jj=color[i][j],kk=color[i][k];
if(jj<kk&&!((jj+kk)%2))//判断
ans=(ans+(jj%10007+kk%10007)%10007*(a[jj].num%10007+a[kk].num%10007)%10007)%10007;//求和
}
cout<<ans<<endl;//输出
return 0;
}
```
以上,TLE(80').中途出现了两个问题:
(1)一开始以为x&z不是下标,是方格里的值,那样每一行就可能是无序的,所以用了一个sort.后来把预处理的地方改对了,但是忘了删sort,再加上求余处理的不好,所以AC(40')+TLE(40')+WA(20'超出int范围,变为负);
(2)也是第一个问题衍生的.删除了sort以后,没有想到下标存入时,本来就是有序的,所以在判断时多加了一个if(jj<kk)的语句.后来优化程序的时候,注意到了这一点,就把这句话删掉了,于是,可怕的事情发生了——本来以为去了一个判断,就算不能再过一个点,也不会把原来得分的点丢掉,但事实就是这样的——TLE(80')->TLE(70')……(而且不止是一个点,有好几个点,都出现了优化前比优化后耗时少的情况)「·为什么少了一个判断,反而会耗时更长?待解答!·」
****这里想求教的是(2),望大神解答:)
by 林空鹿饮溪 @ 2018-07-20 16:48:02