返回信息流548MS是怎么做到的?
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #89054同步于 2016/3/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
求BUPTOJ 84题 single number排名第一的解法
jichengpeng
2016/3/8镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
【 在 leo0316 的大作中提到: 】
: 这道题都快成日经贴, 去历史搜搜吧
#include<stdio.h>
#include<string.h>
int main()
{
int n,i,j;
while(~scanf("%d",&n)){
char s[20];
int cnt[20][10]={0};
while(n--){
scanf("%s",s);
int Len=strlen(s);
for(i=Len-1;i>=0;i--)
cnt[Len-1-i][s[i]-'0']++;
}
for(i=19;i>=0;i--)
for(j=0;j<=9;j++)
if(cnt[i][j]%3)
putchar(j+'0');
putchar('\n');
}
return 0;
}
这个算法快一点,676ms,但并不是那个548ms的
【 在 jichengpeng 的大作中提到: 】
: #include<stdio.h>
: #include<string.h>
: int main()
: ...................
测评机不太稳定,就是这个做法。。
可以考虑用下bitmanipulating
int singleNumber(vector<int>& nums) {
int len = nums.size();
int result = 0;
int bits[32] = {0};
for(int i=0;i<32;i++){
for(int j=0;j<len;j++){
bits[i] += (nums[j]>>i)&1;
}
result += (bits[i]%3)<<i;
}
return result;
}